Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dbExpress - как правильно организовать запрос? [D6, D7, MySQL]


Страницы:   1 2

Skif ©   (2004-01-20 12:55:00) 

Собсно имеется форма. на ней три компонента:

SQLConnection1: TSQLConnection;
SQLQuery1: TSQLQuery;
DataSource1: TDataSource;

В параметрах SQLConnection1 заданы необходимые параметры для подключения к базе MySQL - тут проблем нет, коннектиться на ура
У компонента SQLQuery1 датасорсис и конекшин указаны DataSource1 и SQLConnection1.
При ппытке активизировать SQLQuery1 ( SQLQuery1.active:=true) - выдается сообщение:
Missing query, table name or procedure name
тоже самое происходит при выполнении запроса:

var
t,user:string;
begin
t:="size";
user:=#39"skif"#39;
Label2.Caption:=user;
SQLConnection1.Connected:=true;
SQLQuery1.Close;
SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add("SELECT sum("+ t +") from squid_log_1 where ident="+ user);
SQLQuery1.Open; {Выполняем запрос и открываем набор данных}

showmessage(Query1.Fields[0].AsString);
SQLConnection1.Connected:=false;


Конечно, можно пойти в обход и организовать все сие через BDE, но так не интересно, хочеться понять ПОЧЕМУ все же такое происходит. И как при помощи ЭТОГО организовать подключение к базе и обработку запроса.


Sandman25   (2004-01-21 12:08:00) [1]

[21] }|{yk © (21.01.04 10:41)

Этого я не знал. Пойду почитаю чего-нибудь о нем.


}|{yk   (2004-01-21 10:41:00) [2]

Почему же? ZeosLib насколько я знаю умеет легко работать с MySQL, InterBase, Oracle и MSSQL. Так что переделывать придется немного (примерно столько, сколько и при использовании dbExpress )


Sandman25   (2004-01-21 10:14:00) [3]

[19] }|{yk © (20.01.04 17:49)

Если надо будет перейти на Oracle/MSSQL/InterBase/Informix, то нужно будет только изменить параметры TSQLConnection и все будет работать.
А при использовании direct access components придется переделывать ВСЕ.


}|{yk   (2004-01-20 17:49:00) [4]

Если не секрет, а почему ты не хоччешь пользоваться например MyDAC или (если денег нет) ZeosLib? Куда удобней и надежней чем dbExpress. Рекомендую. Сначала юзал через ODBC+BDE. Но после надоедливой борьбы с глюками перешел на ZeosLib. Хотя MyDAC самое оно.


Arm79   (2004-01-20 16:54:00) [5]

??? sqlconnection - sqlquery - provider - clientdataset - datasource


Skif   (2004-01-20 16:06:00) [6]

нет, попробовал, не работает. Ошибка все таже. Попробовал подключить SQLTable - поначалу так же ругалась. Потом прописал TableName и она чудесно активизировалась. А SQLQuery - попрежнему упрямиться.


Johnmen   (2004-01-20 15:55:00) [7]

Если коннект проходит нормально, то
Попробуй такой запрос. ДОСЛОВНО !!!
SELECT SUM(msize) FROM SQUID_LOG_1 WHERE ident="skif"


Skif   (2004-01-20 15:40:00) [8]

Не помогло.


Johnmen   (2004-01-20 15:33:00) [9]

>Skif

Пропиши весь запрос большими буквами.


Skif   (2004-01-20 14:48:00) [10]

Я имею ввиду не весь проект, а только чистую форму, где работает в сцепке SQLConnection1: TSQLConnection;
SQLQuery1: TSQLQuery;
DataSource1: TDataSource;
Все, остальное мне не нужно. точно так же высылаю тебе свой такой же чистый.


Johnmen   (2004-01-20 14:45:00) [11]

>Skif

Могу. Но не буду. Мой проект делал не я один...:)
Свой высылай. Но ! Быстро посмотреть не обещаю...


Skif   (2004-01-20 14:34:00) [12]

Сдушай Johnmen, а можешь запакованный проект переслать на мыло? Буду очень признателен. Или свой могу выслать, что бы глянул.


Плохиш_   (2004-01-20 14:26:00) [13]

>Skif (20.01.04 14:08) [8]

> SQLQuery1.Close;
> SQLQuery1.SQL.Clear;
>
> SQLQuery1.Open;

И какая реакция по твоему должна быть в этом случая

А так [9]


Johnmen   (2004-01-20 14:19:00) [14]

Ну прям и не знаю... У меня всё работает...


Skif   (2004-01-20 14:08:00) [15]

Кстати и по этой причине, я его вот таким макаром обходил. Просто то, что в делфе оно зарезервировано, когда БД делал - не думал - думал, что обойдусь полностью фрей и перлом, а там все тривиально:

skif@freebsd :mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1066 to server version: 3.23.58

Type "help;" or "\h" for help. Type "\c" to clear the buffer.

mysql> connect squid;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Connection id: 1067
Current database: squid

mysql> select sum(size) from squid_log_1;
+------------+
| sum(size) |
+------------+
| 1284292099 |
+------------+
1 row in set (13.34 sec)

mysql>


тобишь на слово size никаких проблем.
Но это так, мелочи. Объясните почему не желает активизироваться SQLQuery? Ведь именно из-за этого проблемы и возникают, потому, чтоо даже когда делаю так:

SQLConnection1.Connected:=true;

SQLQuery1.Close;
SQLQuery1.SQL.Clear;

SQLQuery1.Open;

SQLConnection1.Connected:=false;

Таже фигня происходит.


Johnmen   (2004-01-20 13:56:00) [16]

А зачем называешь поле зарезервированным словом ?
:)


Skif   (2004-01-20 13:47:00) [17]

ДА фишка вся не в самом запросе, я менял его даже на просто SELECT sum(size) FROM squid_log_1 (все выше произведенные манипуляции были направлены на то, что бы одойти ограничение на символ #39(он же апостроф - " - и подключение к нескольким таблицам). Сам запрос, повторю, работает. Все, что я сейчас добиваюсь - отвязаться от ODBC - просто подлить две библиотеки в дистрибутив к своей проге и все.
Я имею проблему при активизации компонента SQLQuery1. Вот ругается он хоть тресни. Не пойму какой таблицы, процедуры или ЗАПРОСА ему не хватает.


Johnmen   (2004-01-20 13:37:00) [18]

А так ?
SELECT sum("+ t +") "MySum" from ...


Skif   (2004-01-20 13:16:00) [19]

Подсчитывает трафик.
Сама конструкция рабочая. Вот кусок кода от варианта с BDE, чуть видо измененный:

procedure TForm2.FormCreate(Sender: TObject);
var
t,user:string;
begin
t:="size";
user:=#39"skif"#39;
Label2.Caption:=user;
Database1.Connected:=true;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("SELECT sum("+ t +") from squid_log_1 where ident="+ user);
Query1.Open; {Выполняем запрос и открываем набор данных}
Label6.Caption:=Query1.Fields[0].AsString;
Database1.Connected:=false;

end;



Ну и результат обраьботки соответственно выдает как положенно, тобишь нужное числовое значение. Но вот при использовании не BDEпри попытке сделать запрос(open):

SQLQuery1.Open; {Выполняем запрос и открываем набор данных}
// ==== вот здесь всплывает искомая ошибка!
showmessage(Query1.Fields[0].AsString);


Методом научно тыка было выяснено, что причина - активация компонента SQLQuery1. Когда SQLQuery1.active:=false переходит в SQLQuery1.active:=true, кому-то чего-то нехватает. Вот только не могу понять чего.


Tt   (2004-01-20 13:07:00) [20]

Интересно, sum("+ t +") что это конструкция суммирует?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо