Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-39084
Agent13
2004-01-22 18:36
2004.02.13
Пиратам - нет!


9-38661
Sacred
2003-07-31 20:54
2004.02.13
Угол обзора камеры


1-38930
Pahan_
2004-02-02 22:31
2004.02.13
Как преобразовать строку в Unicode, а так же из Unicode?


14-39092
Shaman
2004-01-23 17:25
2004.02.13
8Mb кэша на винте сильно чувствуются?


14-39054
pumba
2004-01-24 18:33
2004.02.13
Народ, как вступить в ФИДО?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский