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

Вниз

после выполнения SQL запроса результат не отображается   Найти похожие ветки 

 
Алексей   (2004-08-09 13:35) [0]

Здравствуйте.
Собственно это и есть вопрос. После выполнения SQL запроса результат не отображается в DBGrid. Даже столбцов становится не видно, как будто нет подключения к базе данных. Тоесть когда программа запускается, то всё работает как задано в начале на этапе разработки, а потом, когда меняю SQL запрос програмно, в  DBGrid ничего не видно.
DataModule2.Query1.Close;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Add("SELECT M.id");
DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");
DataModule2.Query1.SQL.Add("WHERE " + s_GreatFilter + ";");
DataModule2.Query1.Open;
Здесь s_GreatFilter програмно созданное условие запроса типа M.DataRojdeniya = "31.12.2000".
Нужно отобрать ключевые поля M.id записей таблицы Main_FIO.db отвечающих заданному условию s_GreatFilter .
Что я делаю неправильно?


 
Sergey13 ©   (2004-08-09 13:39) [1]

А как связаны "Main_FIO.db" , "Adress.db" , "Pasport.db" , "Rozisknoe_Delo.db" между собой в запросе? Просто у тебя, ИМХО, получается произведение всех таблиц и комп входит в ступор от объема. Покажи первоначальный запрос, когда "все работает".


 
Алексей   (2004-08-09 14:11) [2]

Наверно я неправильно объяснил. Когда поместил Query на DataModule2, задал базу данных, в SQL записал SELECT * FROM Main_FIO.db и в DBGrid появились и поля и их значения, всё нормально. Запускаю программу всё отображается, но стоит обработать запрос, даже такой же как и был раньше (SELECT * FROM Main_FIO.db), и DBGrid умирает. В нём нет ничего. С Query я только начал работать, до этого общался с TTable и всё делал через Filter, а тут прям как упёрся, не доходит что не так и всё тут.


 
Соловьев ©   (2004-08-09 14:13) [3]


> но стоит обработать запрос, даже такой же как и был раньше
> (SELECT * FROM Main_FIO.db), и DBGrid умирает.

т.е.? ошибка? пустой набор данных?
localsql.hlp+table names
SELECT * FROM "Main_FIO.db"


 
Sergey13 ©   (2004-08-09 14:30) [4]

2[2] Алексей   (09.08.04 14:11)
>но стоит обработать запрос
Что за "обработать"? Конкретно.

SELECT * FROM Main_FIO.db
И
SELECT M.id FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD WHERE " + s_GreatFilter

Это слегка разные вещи, не кажется тебе?
Да, и убери в запросе + ";"


 
Алексей   (2004-08-09 14:38) [5]

DBGrid просто "умирает", в нём ничего нет, никаких ошибок не возникает, программа работает. Когда DBGrid на форму ложишь, он пустой, вот такой же он и становится. Т.е. выглядит так, что когда я Query закрыл для создания SQL запроса он и базу данных закрыл, а потом когда его открываешь база данных закрыта, но ведь это бред, Query.Close не должен закрывать базу и не закрывет. В программе используются паралельно TTable и TQuerу подключенные к одному DataBase. Умирающий DBGrid подключён к TQuerу. Те что подключены к TTable продолжают всё показывать.


 
Соловьев ©   (2004-08-09 14:43) [6]


> Умирающий DBGrid подключён к TQuerу

даблклик по гриду - есть колумны?


 
Sergey13 ©   (2004-08-09 14:44) [7]

2[5] Алексей   (09.08.04 14:38)
Скажу проще. Твой "длинный" запрос - фигня, ибо не определены связи таблиц. Поэтому делается полное произведение всех таблиц.


 
Алексей   (2004-08-09 14:50) [8]

";" это уберу, спасибо. В программе "Main_FIO.db" As M это главная таблица, а "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" это подчинённые таблицы которые хранят ключ главной, и в запросе могут отбираться записи в главной таблице Main_FIO.db по принципу
"Поле подчинённой" = "условию" AND "Ключевое поле главной" = "сохранённому ключевому полю подчинённой". Но даже если эти запросы исключить, ничего не отбирать :), а создать SQL запрос вида SELECT M.id FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD т.е просто показать все записи таблицы Main_FIO.db, как я понимаю, то всё равно DBGrid "умирает".


 
Наталия ©   (2004-08-09 14:54) [9]

Своим запросом ты получаешь полное перемножение всех своих таблиц. Неудивительно, что у тебя всё "умирает". Добавь в условие связи между этими таблицами


 
Соловьев ©   (2004-08-09 14:55) [10]

Та не "умирает" у него. Если бы умерло то мы бы видели вопрос про зависание проги. А у него 100% колумны остались от старого запроса в гриде.


 
Sergey13 ©   (2004-08-09 14:57) [11]

2[8] Алексей   (09.08.04 14:50)
>В программе "Main_FIO.db" As M это главная таблица, а "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" это подчинённые таблицы которые хранят ключ главной, и в запросе могут отбираться записи в главной таблице Main_FIO.db по принципу
"Поле подчинённой" = "условию" AND "Ключевое поле главной" = "сохранённому ключевому полю подчинённой".

Вот ТЫ все знаешь, осталось объяснить это базе в запросе. 8-)


 
Алексей   (2004-08-09 14:57) [12]

Для Соловьев ©
даблклик по гриду ничего не даёт. По крайней мере ничего не появляется.
Для Sergey13 ©
И чего надо сделать?
SELECT M.id FROM "Main_FIO.db" As M LEFT JOIN "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
Я правильно понял? Но почему умирает DBGrid?


 
Sergey13 ©   (2004-08-09 15:04) [13]

2[12] Алексей   (09.08.04 14:57)
>Но почему умирает DBGrid?
Да не грид умирает, а связаный датасет.

>SELECT M.id FROM "Main_FIO.db" As M LEFT JOIN "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
Можно и с джоином можно и без него, только синтаксис подучи. Главное сказать, что
""Поле подчинённой" = "условию" AND "Ключевое поле главной" = "сохранённому ключевому полю подчинённой". "


 
Соловьев ©   (2004-08-09 15:05) [14]


> По крайней мере ничего не появляется

врешь - должно появиться окошко - список колумнов. Возможно пустой. Правый клик - активна кнопка Add All Fields?


 
Алексей   (2004-08-09 15:07) [15]

Для Sergey13 ©
Условие отбора формируется для главной таблицы как
If Form6.Edit1.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " + "M.Familiya LIKE "%" || "" + Form6.Edit1.Text + "" || "%""
else s_GreatFilter := "M.Familiya LIKE "%" || "" +    Form6.Edit1.Text + "" || "%"";
А для подчинённых таблиц
If Form6.Edit9.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_TipAdresa LIKE "" + Form6.Edit9.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_TipAdresa LIKE "" + Form6.Edit9.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
Но даже без этих запросов, простой запрос типа
DataModule2.Query1.Close;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Add("SELECT M.id");
DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");
DataModule2.Query1.Open;
Убивает DBGrid, и программа не виснет, работает.


 
Sergey13 ©   (2004-08-09 15:10) [16]

Бр-р-р. А нельзя просто написать текст результирующего запроса? Без If Form6.Edit1.Text


 
Алексей   (2004-08-09 15:17) [17]

Для Соловьев ©
Понял, я говорил о работающей программе, там пропадают данные из грида. При программировании, как только поместил Query на DataModule2, задал базу данных, в SQL записал SELECT * FROM Main_FIO.db, то в DBGrid появились и поля и их значения, всё нормально, Activ = true, работает. Запускаю программу всё отображается, но стоит нажать на кнопку с запросом типа
DataModule2.Query1.Close;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Add("SELECT M.id");
DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");
DataModule2.Query1.Open;
начинаются проблемы как я говорил. Умирает грид.
Для Sergey13 ©  
Синтаксис подучу. Я так понял что ВЕСЬ запрос (после WHERE) должен быть в кавычках? Ну а если без WHERE? просто отобразить поля, почему не работает?


 
Val ©   (2004-08-09 15:19) [18]

Коллеги, мне кажется что вы что-то упускаете, начав разбирать запрос автора. Обратите внимание
1.
> ...Когда поместил Query на DataModule2, задал базу данных,
> в SQL записал SELECT * FROM Main_FIO.db и в DBGrid появились
> и поля и их значения, всё нормально. Запускаю программу
> всё отображается, но стоит обработать запрос, даже такой
> же как и был раньше (SELECT * FROM Main_FIO.db), и DBGrid
> умирает....

2.
> ...DBGrid просто "умирает", в нём ничего нет, никаких ошибок
> не возникает, программа работает. Когда DBGrid на форму
> ложишь, он пустой, вот такой же он и становится....

Подозреваю, что он отцепляет сетку от источника данных, либо закрывает его где-то. Если запрос ничего не вернул бы - у него остались бы заголовки колонок. У него "пустеет сетка" при любом запросе.


 
Соловьев ©   (2004-08-09 15:22) [19]


> DataModule2.Query1.SQL.Add("SELECT M.id");
> DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db"
> As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");

localsql.hlp + join


 
Алексей   (2004-08-09 15:27) [20]

Для Sergey13 ©
Запрос формируется пользователем в процессе работы программы. Сам запрос должен выглядеть или как
s_GreatFilter  := "M.Familiya LIKE "%" || "" + Form6.Edit1.Text + "" || "%""
если запрос один или
s_GreatFilter  := s_GreatFilter + "M.Familiya LIKE "%" || "" + Form6.Edit1.Text + "" || "%""
если запрос добавляется к предыдущему и получается в итоге, например так
SELECT SELECT M.id
FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
WHERE M.Familiya LIKE "%" || "АБВ" || "%" когда запрос один
или
SELECT SELECT M.id
FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
WHERE M.Familiya LIKE "%" || "АБВ" || "%" AND M.Imiya LIKE "%" || "АБВ" || "%"
Так это задумывалось.


 
Алексей   (2004-08-09 15:32) [21]

Для Соловьев ©
localsql.hlp + join - это значит читать хелпы и использовать связывание таблиц?
У меня и книги по Delphi7 есть, толстые, как написано так и сделал, в результате пишу Вам.


 
Соловьев ©   (2004-08-09 15:33) [22]


> У меня и книги по Delphi7 есть, толстые, как написано так
> и сделал, в результате пишу Вам.

SELECT M.id
FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD

А там не написано что хотят получить в таком запросе?


 
Алексей   (2004-08-09 15:34) [23]

Для Val ©  
Абсолютно точно, но, в программе используются паралельно TTable и TQuerу подключенные к одному DataBase. Умирающий DBGrid подключён к TQuerу. Те что подключены к TTable продолжают всё показывать и работать


 
Sergey13 ©   (2004-08-09 15:36) [24]

В результате должгно быть нечто вроде

SELECT SELECT M.id
FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
WHERE M.Familiya LIKE "%АБВ%" AND M.Imiya LIKE "%АБВ%"
AND M.ID=A.M_ID AND M.ID=P.M_ID AND M.ID=RD.M_ID

Хотя логический смысл запроса мне недоступен. Ты проверяешь текстовые поля разных таблиц, а выводишь только ИДшник главной.

ЗЫ: Что то мне версия [18] Val ©   (09.08.04 15:19) все больше нравится.


 
Алексей   (2004-08-09 15:36) [25]

Соловьев ©  
По идее он должен отобразить все поля id таблицы Main_FIO.db
Так это задумывалось.


 
Sergey13 ©   (2004-08-09 15:40) [26]

2[25] Алексей   (09.08.04 15:36)
Соловьев ©  
>По идее он должен отобразить все поля id таблицы Main_FIO.db
Идея не воплощена в жизнь.


 
Соловьев ©   (2004-08-09 15:43) [27]

2 Алексей
Так что там по посту [14]?


 
Алексей   (2004-08-09 15:56) [28]

Для Sergey13 ©
согласен, забыл показать скобки, в программе они есть, прописал лишний SELECT и пара неточностей с моей стороны в общем исправляю
SELECT M.id
FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD
WHERE (M.Familiya LIKE "%АБВ%") AND (M.Imiya LIKE "%АБВ%")
AND (A.A_TipAdresa LIKE "%АБВ%" AND M.ID=A.A_Main_ID) AND (P_PNomerPasprta LIKE "%АБВ%" AND M.ID=P.M_ID) AND (RD_NomerRD LIKE "%АБВ% AND M.ID=RD.M_ID)
это пример получаемого запроса ко всем таблицам по результатам которого должны отбираться записи в главной таблице.
Так это задумывалось.
но вопрос не в запросе :), грид умирает и без него, SELECT *
FROM Main_FIO.db програмно и он умер.


 
Алексей   (2004-08-09 16:02) [29]

Для Соловьев ©
Add All Fields на Query работает (на этапе программирования), на гриде список пустой, поэтому, если я не ошибаюсь, грид заполняется в соответствии с полями таблицы? по правой кнопке предлагает редактор колумнов :)


 
Sergey13 ©   (2004-08-09 16:03) [30]

2Алексей   (09.08.04 15:56)
>По идее он должен отобразить все поля id таблицы Main_FIO.db
>SELECT M.id FROM

>грид умирает и без него
Значит думай над [18]


 
Алексей   (2004-08-09 16:09) [31]

Sergey13 ©  
Так я ж об этом и говорю. База данных не закрывается (элемент DataBase), потому что к ней  паралельно присоеденены и TTable и TQuery? на обоих повешаны гриды (через DataSourse) и тот что на TQuery после запроса умирает а на TTable продолжает жить и работать. Вот в чём непонятка.


 
Sergey13 ©   (2004-08-09 16:13) [32]

2[31] Алексей   (09.08.04 16:09)
Стоят два дома. Один на постоянном фундаменте - нормальный. Другой - на фиг знает каком, при быстрой смене фундамента - падает. Примерно такая аналогия. Вывод - строить нормально. ИМХО, не стОит менять запрос под гридом настолько кардинально.


 
Val ©   (2004-08-09 16:13) [33]

Какая непонятка? Вы закрываете/отвязываете набор данных, который "привязан" к сетке  - DBGrid1.Datasource.DataSet. И TDataBase здесь не причем, если все остальное продолжает работать.


 
Алексей   (2004-08-09 16:13) [34]

Ощущение такое что почему то TQuery отключается от DataBase а обратно не подключается...


 
Val ©   (2004-08-09 16:16) [35]

>[32] Sergey13 ©   (09.08.04 16:13)
согласитесь, гриду все-равно что отображать :)


 
Алексей   (2004-08-09 16:17) [36]

Для Val ©
И как его привязать :)
Для Sergey13 ©
Аналогия понятна и в общем с ней согласен, и как конкретно поступать в моём случае, да и вообще, на будущее?


 
Val ©   (2004-08-09 16:18) [37]

>[34] Алексей   (09.08.04 16:13)
Не обязательно. Вы можете также отцепить его от сетки, хотя запрос. отработает.Соответсвенно, сетка ничего не покажет.
Проверьте свои ощущения с помощью пошагового выполнения.


 
Sergey13 ©   (2004-08-09 16:19) [38]

2[35] Val ©   (09.08.04 16:16)
>согласитесь, гриду все-равно что отображать :)
Согласен, если ему внятно объяснить, то да. 8-)


 
Алексей   (2004-08-09 16:22) [39]

Для Val ©  
согласен, но я меняю SQL запрос по форме
DataModule2.Query1.Close;
...
DataModule2.Query1.Open;
сам грид от DataSourse не отвязываю, работаю только с TQuery? почему же он не привязывается обратно???


 
Алексей   (2004-08-09 16:25) [40]

Val ©  
тоесть сама сетка отцепляется, и если после выполнения запроса её обратно прицепить програмно, то всё заработает? МЫСЛЬ. надо попробовать.


 
Соловьев ©   (2004-08-09 16:26) [41]


> [40] Алексей   (09.08.04 16:25)

сама она не отцепляется.


 
Алексей   (2004-08-09 16:33) [42]

Дак и я не отцеплял, вроде... :)


 
Sergey13 ©   (2004-08-09 16:33) [43]

Есть определенный запрос с полями вывода. На нем стоит грид с прописанными в дизайне полями и т.д. Вдруг в запросе меняется ВСЕ. Даже если сам по себе запрос корректен...


 
Соловьев ©   (2004-08-09 16:35) [44]


> Дак и я не отцеплял, вроде... :)

создай новое приложение положи грид, сорс,кверю и две кнопки.
Свжи сорс с кверей. а грид с сорсом. А по кнопкам распиши открытие разных таблиц типа

procedure TForm1.Button1Click(Sender: TObject);
begin
   with Query1 do
   begin
       if active then Close;
       SQL.Clear;
       SQL.Add("select * from  table1");
       Open;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   with Query1 do
   begin
       if active then Close;
       SQL.Clear;
       SQL.Add("select * from  table2");
       Open;
   end;
end;

запусти и попробуй.


 
Алексей   (2004-08-09 16:45) [45]

Снимаю Шляпу.
Всё работает.
где ж я тогда промазал???


 
Алексей   (2004-08-09 16:48) [46]

Для Sergey13 ©
так в гриде я дизайн и не прописывал. а в примере Уважаемого Соловьев © всё работает.


 
Алексей   (2004-08-09 16:50) [47]

Для Соловьев ©
если можно, вчём точно моя ошибка, хотелось бы понять, а не тупо скопировать код кнопки.


 
Sergey13 ©   (2004-08-09 16:52) [48]

2[46] Алексей   (09.08.04 16:48)
>так в гриде я дизайн и не прописывал
А в датасете?


 
Алексей   (2004-08-09 16:58) [49]

Для Sergey13 ©
А где там прописал? Нет вроде...


 
Sergey13 ©   (2004-08-09 17:02) [50]

2[49] Алексей   (09.08.04 16:58)
>А где там прописал? Нет вроде...
Двойной клик на квери


 
Алексей   (2004-08-09 17:05) [51]

и что прикольно... эти кнопочки и мой грид оживляют (а старая по прежнему убивает)


 
Алексей   (2004-08-09 17:09) [52]

А... так там я уже убрал нафиг... всё равно убивает... киллер я наверное профессиональный... факт... чтото я намудрил с обращением к квери, может Соловьев © подскажет, а то я уже не врубаюсь сам...


 
Соловьев ©   (2004-08-09 17:17) [53]

код приведи ввесь


 
Алексей   (2004-08-09 17:21) [54]

Всего Запроса?


 
Соловьев ©   (2004-08-09 17:24) [55]

проги, ну и запросов


 
Алексей   (2004-08-09 17:33) [56]

Соловьев ©
По Вашим кнопочкам всё заработало, а мой запрос раньше выглядел так
Формируем условия поиска и присваиваем результат переменной s_GreatFilter
DataModule2.Query1.Close;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Add("SELECT M.id");
DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");

Формируем условия поиска и присваиваем результат переменной s_GreatFilter

DataModule2.Query1.SQL.Add("WHERE " + s_GreatFilter + ";");
DataModule2.Query1.Open;
в таком порядке.


 
Соловьев ©   (2004-08-09 17:34) [57]


> DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M, "Adress.db"
> As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");

DataModule2.Query1.SQL.Add("FROM "Main_FIO.db" As M");


 
Алексей   (2004-08-09 17:35) [58]

Ой... В Первый раз "Формируем условия поиска и присваиваем результат переменной s_GreatFilter" этого там нет, этол дальше.
Сам запрос с Вашими кнопками работает корректно.


 
Алексей   (2004-08-09 17:37) [59]

И что там не так?


 
Алексей   (2004-08-09 17:40) [60]

Много лишних таблиц?


 
Алексей   (2004-08-09 17:50) [61]

Вот сам код запроса, у меня некоторые его части закоментированы, искал ошибку


procedure TForm6.Button1Click(Sender: TObject);
var
s_GreatFilter, s_Filter: String;
begin
s_GreatFilter := "";
Button1.Enabled := False;
//-------------------------------
//-------------------------------
//Работаем с таблицей Main_FIO
//
If Form6.Edit1.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND" + "(" + "M.Familiya = " + Form6.Edit1.Text + ")"
else s_GreatFilter := "(" + "M.Familiya = " + Form6.Edit1.Text + ")";

If Form6.Edit2.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND" + "(" + "M.Imiya LIKE "%" + Form6.Edit2.Text + "%"" + ")"
else s_GreatFilter := "(" + "M.Imiya LIKE "%" + Form6.Edit2.Text + "%"" + ")";

If Form6.Edit3.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " + "(" + "M.Pol LIKE "" + Form6.Edit3.Text + """ + ")"
else s_GreatFilter := "(" + "M.Pol LIKE "" + Form6.Edit3.Text + """ + ")";
If Form6.DateTimePicker1.Checked = true then If Form6.DateTimePicker2.Checked = false
then begin
  if s_GreatFilter <> "" then s_GreatFilter := s_GreatFilter + " AND " + "(" +
   "M.DataRojdeniya = " + """ + FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker1.Date) +
    """ + ")"
  else s_GreatFilter := "(" + "M.DataRojdeniya = " + """ +
   FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker1.Date) + """ + ")"
 end else begin
  if s_GreatFilter <> "" then s_GreatFilter := s_GreatFilter + " AND " + "(" +
   "M.DataRojdeniya <=" + """ + FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker1.Date) + """ +
    " AND " + "M.DataRojdeniya >=" + """ + FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker2.Date)
     + """ + ")"
  else s_GreatFilter := "(" + "M.DataRojdeniya <=" + """ +
   FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker1.Date) + """ + " AND " +
    "M.DataRojdeniya >=" + """ + FormatDateTime("dd.mm.yyyy",Form6.DateTimePicker2.Date) +
     """ + ")";
 end;

//-------------------------------
//Закончили работу с таблицей Main_FIO
//
//Начинаем работу с таблицей Adres
//
If Form6.Edit9.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_TipAdresa LIKE "" + Form6.Edit9.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_TipAdresa LIKE "" + Form6.Edit9.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
If Form6.Edit10.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_NasPunkt LIKE "" + Form6.Edit10.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_NasPunkt LIKE "" + Form6.Edit10.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
If Form6.Edit11.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_Adres LIKE "" + Form6.Edit11.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_Adres LIKE "" + Form6.Edit11.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
If Form6.Edit12.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_Dom LIKE "" + Form6.Edit12.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_Dom LIKE "" + Form6.Edit12.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
If Form6.Edit13.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_Kvartira LIKE "" + Form6.Edit13.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_Kvartira LIKE "" + Form6.Edit13.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
If Form6.Edit14.Text <> "" then if s_GreatFilter <> "" then s_GreatFilter :=
 s_GreatFilter + " AND " +  "(" + "A.A_Telefon LIKE "" + Form6.Edit14.Text + """ +
  " AND " + "M.id = A.A_Main_id" + ")"
else s_GreatFilter := "(" + "A.A_Telefon LIKE "" + Form6.Edit14.Text + """ +
 " AND " + "M.id = A.A_Main_id" + ")";
//Закончили работу с таблицей Adres
//
//Начинаем работу с таблицей Pasport
//
...
...
...

//Записываем полученное условие отбора в запрос Query1 и передаём в фильтр Main_FIO
//
If s_GreatFilter <> "" then
with DataModule2.Query1 do
  begin
      if active then Close;
      SQL.Clear;
      SQL.Add("SELECT M.id");
      SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db" As P, "Rozisknoe_Delo.db" As RD");
      SQL.Add("WHERE " + s_GreatFilter);
      Open;
  end;
 begin
end;
//смотрю текст SQL запроса
Form1.Memo2.Text := DataModule2.Query1.SQL.Text;
//------------------------------------------------------------------------------
Close;
end;


Примерно так


 
Соловьев ©   (2004-08-09 17:54) [62]


> Close;

Зачем?


> SQL.Add("FROM "Main_FIO.db" As M, "Adress.db" As A, "Pasport.db"
> As P, "Rozisknoe_Delo.db" As RD");

если ты накладываешь условие на таблицы, то накладывай и на список таблиц


 
Алексей   (2004-08-09 17:59) [63]

и если можно синтаксис для LIKE чтобы определять совпадения по части слова, как его в программе записать
поле LIKE "%слово%"
правильно?


 
Алексей   (2004-08-09 18:02) [64]

Для Соловьев ©
ну...
>Close;
а как редактировать SQL на открытой таблице?
>если ты накладываешь условие на таблицы, то накладывай и на список таблиц
это про какие условия?


 
Алексей   (2004-08-09 18:23) [65]

В общем, в итоге понятен принцип (а причину определит время) как оживить мой грид. Большое спасибо всем кто откликнулся и помогал решать мою проблему. Было очень приятно с Вами общаться. Если в коде запроса что я привёл увидите ошибку, если не трудно, отпишите на мыло или здесь. До свидания.



Страницы: 1 2 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.038 c
14-1092959668
Никола
2004-08-20 03:54
2004.09.05
Подскажите, плиз!


14-1092398504
syte_ser78
2004-08-13 16:01
2004.09.05
Помогите плиз!!!


3-1091863342
Алексей
2004-08-07 11:22
2004.09.05
объединение массивов данных???


3-1091906797
Денисыч
2004-08-07 23:26
2004.09.05
Поддерживает ли технология dbexpress Firebird ?


3-1092304333
User2
2004-08-12 13:52
2004.09.05
IDENTITY