powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / склеивать результаты запросов в один
9 сообщений из 9, страница 1 из 1
склеивать результаты запросов в один
    #32275192
sensey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь пробовал склеивать результаты запросов в один?
<D7:ADO:MSAccess>

Смысл такой:[/ color] хочу сделать SELECT по нескольким таблицам, запрос - один, таблицы перебираються в цикле. Окончательный результат накопить в DBGrid.
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275193
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а про union не слышал?
именно для этого и предназначен
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275252
sensey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, а как его применить в цикле??? Куда его пыхнуть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        qReservate.SQL.Clear;
          qReservate.SQL.Add('SELECT NameTable FROM tTable');
        qReservate.Open;
        qReservate.First;

          while not qReservate.Eof do begin
            strNameTable := qReservate.FieldByName('NameTable').AsString;
            strSQL :='SELECT * FROM ' + strNameTable + ''; 

              qHardWare.SQL.Clear;
                qHardWare.SQL.Add(strSQL);
              qHardWare.Open;
              qHardWare.First;

            qReservate.Next;
          end;
 
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275272
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qReservate.SQL.Clear;
qReservate.SQL.Add('SELECT NameTable FROM tTable');
qReservate.Open;
qReservate.First;
qHardWare.SQL.Clear;
while not qReservate.Eof do begin
strSQL :='SELECT * FROM ' +
qReservate.FieldByName('NameTable').sString;
if qHardWare.SQL.Count > 0 then qHardWare.SQL.Add('UNION');
qHardWare.SQL.Add(strSQL);
qReservate.Next;
end;
qHardWare.Open;
qHardWare.First;

Ну попробуй так...
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275283
sensey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, спасибо StarWind, разобрался сам:
(Единственное боюсь, если таблиц много - строчка SQL запроса разрастется, как бы чего не вышло плохого)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
       qReservate.SQL.Clear;
          qReservate.SQL.Add('SELECT NameTable FROM tTable');
        qReservate.Open;
        qReservate.First;

          while not qReservate.Eof do begin
            strNameTable := qReservate.FieldByName('NameTable').AsString;
            strSQL :='SELECT * FROM ' + strNameTable + '';
              If strSQLSumm<>'' Then strSQLSumm := strSQLSumm + ' UNION ALL ' +   strSQL
            else strSQLSumm := strSQL;
 
            qReservate.Next;
          end;

        qHardWare.SQL.Clear;
           qHardWare.SQL.Add(ststrSQLSumm);
        qHardWare.Open;
        HardWare.First;
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275287
sensey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А! Ты ужой ответил...
Ладно опосля обеда твой вариант погляжу.
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275315
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<<Единственное боюсь, если таблиц много - строчка SQL запроса разрастется, как бы чего не вышло плохого>>

Так и будет из-за ограничений Jet.
Когда строк в запросе будет штук 40, появится ошибка "Слишком сложный запрос". Чтобы этого не произошло читай по частям и добавляй в ADODataSet.
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275456
sensey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем ADODataSet, принципиально отличается от ADOQuery?
Ну запишу в CommandText тот же запрос...
...
Рейтинг: 0 / 0
склеивать результаты запросов в один
    #32275560
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе нужен и ADOQuery, и ADODataSet.
Разбей свой запрос на N частей (нужно, чтобы N было как можно меньше, тогда будет меньше запросов к базе).
Первую часть прочитай с помощью DataSet, потом сделай :
ADODataSet1.Connection := nil
При этом ADODataSet1.Active должен оставаться true .
У тебя получится отсоединеный набор записей.
Затем читаешь следующую часть при помощи ADOQuery и добавляешь результат к ADODataSet при помощи Append или AppendRecord
и так дальше все части запроса.
Ну а потом связывай ADODataSet при помощи DAtaSource с DBGrid-ом как обычно.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / склеивать результаты запросов в один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]