Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.036 c
3-38685
valerchik
2004-01-23 20:48
2004.02.13
DBGrid


3-38729
Vladimir Bolotin
2004-01-21 21:15
2004.02.13
Как скрыть от пользователя обращение к данным?


3-38738
Soi
2004-01-21 10:55
2004.02.13
Запись файла в базу данных


1-38801
Agent13
2004-02-02 16:57
2004.02.13
Пара вопросов по RichEdit


7-39119
agentru
2003-11-27 22:42
2004.02.13
Блокировка клавы???