Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

после выполнения 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.64 MB
Время: 0.035 c
14-1092317319
Hint
2004-08-12 17:28
2004.09.05
Помогите с конфигурацией компьютера для дома


4-1089953351
Сергей Ю.
2004-07-16 08:49
2004.09.05
"Снятие" экрана


11-1079594561
-SeM-
2004-03-18 10:22
2004.09.05
VCL контролы на KOL форме


1-1093086372
masqito
2004-08-21 15:06
2004.09.05
Помогите с построением компонентов.


4-1090300887
[BAD]Angel
2004-07-20 09:21
2004.09.05
Как получить PID процессов?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский