Форум: "Базы";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизdbExpress - как правильно организовать запрос? Найти похожие ветки
← →
Skif (2004-01-20 12:55) [0]Собсно имеется форма. на ней три компонента:
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, но так не интересно, хочеться понять ПОЧЕМУ все же такое происходит. И как при помощи ЭТОГО организовать подключение к базе и обработку запроса.
← →
Johnmen (2004-01-20 13:04) [1]А так ?
... ident="""+ user +"""");
где user:="skif";
← →
Academic (2004-01-20 13:05) [2]Ошибка в тексте запроса
проверь.
← →
Tt (2004-01-20 13:07) [3]Интересно, sum("+ t +") что это конструкция суммирует?
← →
Skif (2004-01-20 13:16) [4]Подсчитывает трафик.
Сама конструкция рабочая. Вот кусок кода от варианта с 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, кому-то чего-то нехватает. Вот только не могу понять чего.
← →
Johnmen (2004-01-20 13:37) [5]А так ?
SELECT sum("+ t +") "MySum" from ...
← →
Skif (2004-01-20 13:47) [6]ДА фишка вся не в самом запросе, я менял его даже на просто SELECT sum(size) FROM squid_log_1 (все выше произведенные манипуляции были направлены на то, что бы одойти ограничение на символ #39(он же апостроф - " - и подключение к нескольким таблицам). Сам запрос, повторю, работает. Все, что я сейчас добиваюсь - отвязаться от ODBC - просто подлить две библиотеки в дистрибутив к своей проге и все.
Я имею проблему при активизации компонента SQLQuery1. Вот ругается он хоть тресни. Не пойму какой таблицы, процедуры или ЗАПРОСА ему не хватает.
← →
Johnmen (2004-01-20 13:56) [7]А зачем называешь поле зарезервированным словом ?
:)
← →
Skif (2004-01-20 14:08) [8]Кстати и по этой причине, я его вот таким макаром обходил. Просто то, что в делфе оно зарезервировано, когда БД делал - не думал - думал, что обойдусь полностью фрей и перлом, а там все тривиально:
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 14:19) [9]Ну прям и не знаю... У меня всё работает...
← →
Плохиш_ (2004-01-20 14:26) [10]>Skif (20.01.04 14:08) [8]
> SQLQuery1.Close;
> SQLQuery1.SQL.Clear;
>
> SQLQuery1.Open;
И какая реакция по твоему должна быть в этом случая
А так [9]
← →
Skif (2004-01-20 14:34) [11]Сдушай Johnmen, а можешь запакованный проект переслать на мыло? Буду очень признателен. Или свой могу выслать, что бы глянул.
← →
Johnmen (2004-01-20 14:45) [12]>Skif
Могу. Но не буду. Мой проект делал не я один...:)
Свой высылай. Но ! Быстро посмотреть не обещаю...
← →
Skif (2004-01-20 14:48) [13]Я имею ввиду не весь проект, а только чистую форму, где работает в сцепке SQLConnection1: TSQLConnection;
SQLQuery1: TSQLQuery;
DataSource1: TDataSource;
Все, остальное мне не нужно. точно так же высылаю тебе свой такой же чистый.
← →
Johnmen (2004-01-20 15:33) [14]>Skif
Пропиши весь запрос большими буквами.
← →
Skif (2004-01-20 15:40) [15]Не помогло.
← →
Johnmen (2004-01-20 15:55) [16]Если коннект проходит нормально, то
Попробуй такой запрос. ДОСЛОВНО !!!
SELECT SUM(msize) FROM SQUID_LOG_1 WHERE ident="skif"
← →
Skif (2004-01-20 16:06) [17]нет, попробовал, не работает. Ошибка все таже. Попробовал подключить SQLTable - поначалу так же ругалась. Потом прописал TableName и она чудесно активизировалась. А SQLQuery - попрежнему упрямиться.
← →
Arm79 (2004-01-20 16:54) [18]??? sqlconnection - sqlquery - provider - clientdataset - datasource
← →
}|{yk (2004-01-20 17:49) [19]Если не секрет, а почему ты не хоччешь пользоваться например MyDAC или (если денег нет) ZeosLib? Куда удобней и надежней чем dbExpress. Рекомендую. Сначала юзал через ODBC+BDE. Но после надоедливой борьбы с глюками перешел на ZeosLib. Хотя MyDAC самое оно.
← →
Sandman25 (2004-01-21 10:14) [20][19] }|{yk © (20.01.04 17:49)
Если надо будет перейти на Oracle/MSSQL/InterBase/Informix, то нужно будет только изменить параметры TSQLConnection и все будет работать.
А при использовании direct access components придется переделывать ВСЕ.
← →
}|{yk (2004-01-21 10:41) [21]Почему же? ZeosLib насколько я знаю умеет легко работать с MySQL, InterBase, Oracle и MSSQL. Так что переделывать придется немного (примерно столько, сколько и при использовании dbExpress )
← →
Sandman25 (2004-01-21 12:08) [22][21] }|{yk © (21.01.04 10:41)
Этого я не знал. Пойду почитаю чего-нибудь о нем.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c