как вывести результат запроса в DBGrid?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

как вывести результат запроса в DBGrid?

Сообщение raven1976 » 15.01.2007 13:23:23

помогите начинающему
Lazarus 0.9.20 + MySQL 5.0.27

бросаю на форму компоненты SQL50Connection, SQLQuery, SQLTransaction, Datasource, и DBGrid

две кнопки "Подключится" и "Выполнить запрос" и поле CommandEdit для ввода запросов

установил свойсва компонентов:
MySQL50Connection1 -> Transaction -> SQLTransaction1
SQLTransaction1 -> Database -> MySQL50Connection1
SQLQuery1 -> Database -> MySQL50Connection1
SQLQuery1 -> Transaction -> SQLTransaction1

DBGrid1 -> DataSource -> DataSource1

при нажатии на нопку "Подключится"

MySQL50Connection1.HostName := 'localhost';
MySQL50Connection1.UserName := 'root';
MySQL50Connection1.Password := '222';
MySQL50Connection1.DatabaseName := 'my_phones';
MySQL50Connection1.Open;

подключение к базе происходит нормально

хочу выбрать все записи из таблицы phones_main
пишу в поле CommandEdit запрос "SELECT * FROM phones_main" и жму кнопку "Выполнить запрос"
у котой прописано

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
Datasource1.DataSet := SQLQuery1;
SQLQuery1.SQL.Text := CommandEdit.Text;
ShowString('Попытка выполнить запрос ' + CommandEdit.Text);

try
SQLQuery1.Open;
ShowString('запрос '+ CommandEdit.Text + ' выполнился успешно');
except
ShowString('Не удалось выполнить запрос ('+ CommandEdit.Text + ')');
end;

SQLQuery1.Close;
end;

согласно сообщениям запрос выполняется нормально,
но почему результат не отображается в DBGrid?
raven1976
незнакомец
 
Сообщения: 3
Зарегистрирован: 15.01.2007 12:51:07

Сообщение Джентельмен » 15.01.2007 15:39:10

ну смотри насколько я понимаю... у тебя в таблице (в гриде) записи неотображаютса вообще... правильно? такое ощущение будто ДатаСет не указан или не активен... вот... скорее всего неактивен... если я не прав, исправь меня... потом будем делать выводы дальше...
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение raven1976 » 16.01.2007 12:29:18

Джентельмен писал(а):ну смотри насколько я понимаю... у тебя в таблице (в гриде) записи неотображаютса вообще... правильно? такое ощущение будто ДатаСет не указан или не активен... вот... скорее всего неактивен... если я не прав, исправь меня... потом будем делать выводы дальше...


Да, грид пустой
Если имеется ввиду свойство DataSet компонента Datasource1, то ведь я его устанавливаю при нажатии кнопки OpenQueryButton

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
Datasource1.DataSet := SQLQuery1;

а вот насчет активен..., а это где? не вижу я у Datasource такого свойства. Или речь идет о SQLQuery?
raven1976
незнакомец
 
Сообщения: 3
Зарегистрирован: 15.01.2007 12:51:07

Сообщение Джентельмен » 16.01.2007 17:00:44

да! равно... а зделай вот так:

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
Datasource1.DataSet := SQLQuery1;
SQLQuery1.Active := True;

если получитса скажеш...
обычно я часто так ошибался...
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение raven1976 » 17.01.2007 11:46:23

Джентельмен писал(а):да! равно... а зделай вот так:

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
Datasource1.DataSet := SQLQuery1;
SQLQuery1.Active := True;

если получитса скажеш...
обычно я часто так ошибался...


ну чтобы да, ... так таки нет ?:(

если не влом, объясни порядок вызовов (или подскажи где толково описано)
вот у меня сейчас
procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
SQLQuery1.SQL.Text := CommandEdit.Text;
SQLQuery1.Active := True;
SQLQuery1.Open;
Datasource1.DataSet := SQLQuery1;
ShowString('попытка выполнить запрос' + CommandEdit.Text);
....

пробовал уже разные комбинации напр.
сначала SQLQuery1.Open;
а потом SQLQuery1.Active := True;

сообщения выводятся что запрос выполнился, а грид все пустой...
пока что не понимаю логики, а почитать негде
raven1976
незнакомец
 
Сообщения: 3
Зарегистрирован: 15.01.2007 12:51:07

Сообщение Джентельмен » 17.01.2007 13:49:18

а посмотри еще вот так:

SQLQuery1.Open;
MySQL50Connection1.Open;

потому что у меня так работает...

if s = 6 then
Begin
FIBDataSet1.SelectSQL.Text := 'Строка запроса';
End;

FIBDataSet1.Database := DataModule1.FIBDataBase1;
FIBDataSet1.Transaction := DataModule1.FIBTransaction1;
DataModule1.FIBDataBase1.Connected := True;
DataModule1.FIBTransaction1.Active := True;
FIBDataSet1.Active := True; // на вот эту строку обрати внимание...


после выполнения запроса я по новой все назначаю... у тебя должна быть такая же порблема...

или вышли исхоники на alexey@nikron.krm.net.ua самому интересно...
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение GodDog » 22.03.2007 00:56:35

Возможно глупо так в лоб, но спрошу
пишу под виндой, мускул 5.0.18.
проблема в следующем. в dbgrid весь текст '???' (что касается русских букв), на сервере пробовал по умолчанию ставить и utf8, cp1251.. не помогает, при чем у TMySQLConnection50 есть св-во CharSet но такое ощушение что он даже не смотрит что ему туда пишут. пожалуйста подскажите, как быть?
GodDog
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.01.2007 19:16:52
Откуда: Россия


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: zub и гости: 31

Рейтинг@Mail.ru