|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
MySQL4 (DataSource+SQLConnection+SimpleDataSet+DBGrid) проблемы
Прога состоит из двух форм. На первой размещены все компоненты и непосредственно вся работа в ней проводится, вторая - чисто настройки для подключения к базе (сервер, база, пользователь, пароль - 4 едита и батон).
Настройки упорно подставляют рута с пустым паролем, вместо текста, забиваемого в соответствующие едиты(на забиваемые в едиты хост и название базы компоненты вроде реагируют адекватно), не пойму в чем дело... наверное неправильно работаю с их записью в компоненты SimpleDataSet и SQLConnection. Знаю, можно через LoginPromt := true работать с пользователем и паролем, но не хочу так, хочу именно "вручную" Форма1(MainForm): Код:
... procedure TMainForm.FormShow(Sender: TObject); begin SettingsForm.ShowModal(); end; ... Форма2(SettingsForm): Код:
... procedure TSettingsForm.ConnectBtnClick(Sender: TObject); begin MainForm.SimpleDataSet1.Active := false; MainForm.SQLConnection1.Connected := false; MainForm.SimpleDataSet1.Connection.Params.Clear; MainForm.SQLConnection1.Params.Clear; MainForm.SQLConnection1.Params.Add('DriverName=MySQL'); MainForm.SimpleDataSet1.Connection.Params.Add('DriverName=MySQL'); MainForm.SQLConnection1.Params.Add('HostName='+SettingsForm.ServerEdit.Text); MainForm.SimpleDataSet1.Connection.Params.Add('HostName='+SettingsForm.ServerEdit.Text); MainForm.SQLConnection1.Params.Add('DataBase='+SettingsForm.BaseEdit.Text); MainForm.SimpleDataSet1.Connection.Params.Add('DataBase='+SettingsForm.BaseEdit.Text); MainForm.SQLConnection1.Params.Add('User_Name='+SettingsForm.UserEdit.Text); MainForm.SimpleDataSet1.Connection.Params.Add('User_Name='+SettingsForm.UserEdit.Text); MainForm.SQLConnection1.Params.Add('Password='+PassEdit.Text); MainForm.SimpleDataSet1.Connection.Params.Add('Password='+SettingsForm.PassEdit.Text); MainForm.SQLConnection1.Params.Add('BlobSize=-1'); MainForm.SimpleDataSet1.Connection.Params.Add('BlobSize=-1'); MainForm.SQLConnection1.Params.Add('ErrorResourceFile='); MainForm.SimpleDataSet1.Connection.Params.Add('ErrorResourceFile='); MainForm.SQLConnection1.Params.Add('LocaleCode=1251'); MainForm.SimpleDataSet1.Connection.Params.Add('LocaleCode=1251'); MainForm.SimpleDataSet1.Active := true; MainForm.SQLConnection1.Connected := true; SettingsForm.Close(); end; ... На сколько я понял, параметры, заданные SimpleDataSet'у автоматически присваиваются SQLConnection'у, т.к. они "повязаны" , однако, т.к. ничего не работает у меня, то в коде всеравно дублирую, как видите изменение параметров в последний компонент тоже. Вот еще имеется вторая проблема такая: на главной форме есть едит и кнопка, для осуществления простого, примитивнейшего поиска по таблице базы. Но вот незадача, Мускул не понимает кириллицу, вводимую в этот едит, т.е. выдает ошибку: Код:
Project Project1.exe raised exception class EDatabaseError with message 'Uncnown Column "тут юникодная абракадабра"' in 'where clause". Process stoped. Use Step or Run to continue. Листинг: Код:
... procedure TMainForm.SearchBtnClick(Sender: TObject); begin SimpleDataSet1.Active := false; SimpleDataSet1.DataSet.CommandText := 'SELECT * FROM tblname WHERE column1 LIKE '+SearchEdit.Text+' or column2 LIKE '+SearchEdit.Text+' or...'; SimpleDataSet1.Active := true; end; ... Прошу подсобить чем-нить более опытных товарищей! |
#2
|
||||
|
||||
1. Не устаю удивлятся изобретательности начинающих. Так организовать подключение к БД, надо было придумать.
2. Сообщение об ошибке вы дали - молодцом. Ну а сам запрос зачем порезали? Что я должен понять по многоточию? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
Дело в том, что с бд в дельфе еще ни разу не работал, проштудировал этот вопрос в гугле и пошел по наиболее тривиальному, очевидному, понятному мне и легкому, на мой взгляд, пути. Да, может быть не как некоторые, привыкшие товарищи, через адо или бде работают, или вобще через доп. компоненты навроде зеосдб. Способов то работы с базой куча... и я избрал не самый плохой из них, или не так? Цитата:
Извиняюсь, если непонятно истолковал, по многоточию, имелось ввиду, что поиск ведется по всем столбцам таблицы, предположим у меня 5 столбцов, тогда вот так: Код:
... procedure TMainForm.SearchBtnClick(Sender: TObject); begin SimpleDataSet1.Active := false; SimpleDataSet1.DataSet.CommandText := 'SELECT * FROM tblname WHERE column1 LIKE '+SearchEdit.Text+' or column2 LIKE '+SearchEdit.Text+' or column3 LIKE '+SearchEdit.Text+' or column4 LIKE '+SearchEdit.Text+' or column5 LIKE '+SearchEdit.Text+; SimpleDataSet1.Active := true; end; ... |
#4
|
||||
|
||||
При работе с текстовыми полями в запросе их необходимо обрамлять а кавычки, иначе искать будет неправильно. Например:
Код:
select * from MyTable where Column like Иванов а вот Код:
select * from MyTable where Column like 'Иванов%' Для простоты рекомендую воспользоваться функцией QuotedStr: Код:
SimpleDataSet1.DataSet.CommandText := 'SELECT * FROM tblname WHERE column1 LIKE '+QuotedStr(SearchEdit.Text)+... Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Спасибо, помогло!
Если сделать так: Код:
SimpleDataSet1.DataSet.CommandText := 'SELECT * FROM tblname WHERE column1 LIKE '''+SearchEdit.Text+'''... Код:
SimpleDataSet1.DataSet.CommandText := 'SELECT * FROM tblname WHERE column1 LIKE '+QuotedStr(SearchEdit.Text)+'... Вот теперь бы еще с этим рутом разобраться... такое ощущение, что в каком-то компоненте просто стоит сойство: беспарольный_авторут := true |