![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
после выполнения SQL запроса результат не отображается [D7, Paradox]
Алексей © (2004-08-09 13:35:00)Здравствуйте.
Собственно это и есть вопрос. После выполнения 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 .
Что я делаю неправильно?
Алексей (2004-08-09 18:23:00) [1]В общем, в итоге понятен принцип (а причину определит время) как оживить мой грид. Большое спасибо всем кто откликнулся и помогал решать мою проблему. Было очень приятно с Вами общаться. Если в коде запроса что я привёл увидите ошибку, если не трудно, отпишите на мыло или здесь. До свидания.
Алексей (2004-08-09 18:02:00) [2]Для Соловьев ©
ну...
>Close;
а как редактировать SQL на открытой таблице?
>если ты накладываешь условие на таблицы, то накладывай и на список таблиц
это про какие условия?
Алексей (2004-08-09 17:59:00) [3]и если можно синтаксис для LIKE чтобы определять совпадения по части слова, как его в программе записать
поле LIKE "%слово%"
правильно?
Соловьев (2004-08-09 17:54:00) [4]
> 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:50:00) [5]Вот сам код запроса, у меня некоторые его части закоментированы, искал ошибку
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:40:00) [6]Много лишних таблиц?
Алексей (2004-08-09 17:37:00) [7]И что там не так?
Алексей (2004-08-09 17:35:00) [8]Ой... В Первый раз "Формируем условия поиска и присваиваем результат переменной s_GreatFilter" этого там нет, этол дальше.
Сам запрос с Вашими кнопками работает корректно.
Соловьев (2004-08-09 17:34:00) [9]
> 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:33:00) [10]Соловьев ©
По Вашим кнопочкам всё заработало, а мой запрос раньше выглядел так
Формируем условия поиска и присваиваем результат переменной 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:24:00) [11]проги, ну и запросов
Алексей (2004-08-09 17:21:00) [12]Всего Запроса?
Соловьев (2004-08-09 17:17:00) [13]код приведи ввесь
Алексей (2004-08-09 17:09:00) [14]А... так там я уже убрал нафиг... всё равно убивает... киллер я наверное профессиональный... факт... чтото я намудрил с обращением к квери, может Соловьев © подскажет, а то я уже не врубаюсь сам...
Алексей (2004-08-09 17:05:00) [15]и что прикольно... эти кнопочки и мой грид оживляют (а старая по прежнему убивает)
Sergey13 (2004-08-09 17:02:00) [16]2[49] Алексей (09.08.04 16:58)
>А где там прописал? Нет вроде...
Двойной клик на квери
Алексей (2004-08-09 16:58:00) [17]Для Sergey13 ©
А где там прописал? Нет вроде...
Sergey13 (2004-08-09 16:52:00) [18]2[46] Алексей (09.08.04 16:48)
>так в гриде я дизайн и не прописывал
А в датасете?
Алексей (2004-08-09 16:50:00) [19]Для Соловьев ©
если можно, вчём точно моя ошибка, хотелось бы понять, а не тупо скопировать код кнопки.
Алексей (2004-08-09 16:48:00) [20]Для Sergey13 ©
так в гриде я дизайн и не прописывал. а в примере Уважаемого Соловьев © всё работает.