Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TQuery и TTable - перегон


Автор: MacTep 22.7.2004, 14:31
Как из компонента TQuery после определенного запроса все записи перегнать в TTable? Ведь после выполнения запроса получается как бы виртуальный набор данных, а не действительный. Как сделать так, чтобы после запроса можно было бы работать с набором данных как с действительным?

Автор: <Spawn> 22.7.2004, 14:52
MacTep Не понял тебя. Выполняешь SELECT, полсле этого стандартным образом используешь:

Код
with Query1 do
begin
 First;
 while not Eof do
 begin
   <Что то делаешь>
   Next;
 end;
end;

Автор: MacTep 22.7.2004, 14:56
Да, то, что ты написал, все это ясно! Но мне надо именно так сделать, чтобы из результата какого-то запроса получить эот получившийся набор данных и в Table. А вот ето как сделать?

Автор: <Spawn> 22.7.2004, 15:19
MacTep А зачем в Table то? Ну можешь сделать подобным образом. Но я не мойму зачем это нужно.

Код
with Query1 do
begin
First;
while not Eof do
begin
  Table1.AppendRecord(FieldByName('sff').AsString, FieldByName('sdfsd').AsInteger, ...);
  Next;
end;
end;

Автор: MacTep 22.7.2004, 17:21
Всмысле ты хочешь сказать, что Table, собственно, и использовать-то не надо? Просто управлять базой при помощи SQL-запросов через TQuery?

Автор: gray_k 22.7.2004, 17:35
Цитата
Всмысле ты хочешь сказать, что Table, собственно, и использовать-то не надо? Просто управлять базой при помощи SQL-запросов через TQuery

Если у тебя выбор из одной таблицы, то установив параметр RequiredLive в true, ты сможешь работать с TQuery так же как из TTable, т.е. редактировать, удалять и вставлять записи.
Может ты подробнее свою задачу опишешь. У меня создалось впечатление, что ты абсолютно не понимаешь принципов работы с БД в Дельфи.
Какие операции с данными ты хочешь производить?

Автор: MacTep 22.7.2004, 23:02
Для gray_k:
я хочу добавлять, удалять, сортировать, выбирать по определенному полю записи из базы данных. Почему ты решил, что я не понимаю принципов работы БД? Где это видно? Просто я читал в книге, что TQuery только отображает записи при какой-либо выборке (или еще каких-нибудь действиях). Вот поэтому и спрашивал, что и как. Спасибо за ответ! Если есть что сказать по этому вопросу, то буду только рад...

Автор: Illusion Dolphin 22.7.2004, 23:31
Если надо: сохраняет запрос как обычную таблицу на диск:

Код

procedure MakePermTable(Qry: TQuery; PermTableName: string);
var
 h: HDBICur;
begin
if Qry.Active then Qry.Close;
Qry.Prepare;
dbiQExec(Qry.StmtHandle, @h);
DbiMakePermanent(h, PChar(PermTableName), True);
end;


Потом открывай это с помощью TTable и делай что хочешь...

Автор: MacTep 22.7.2004, 23:43
Вот это уже намного конкретнее. Только еще вопрос (попутный): что за процедуры такие, которые начинаются с dbi, например, dbiQExec(Qry.StmtHandle, @h); или DbiMakePermanent(h, PChar(PermTableName), True);? Много их видел во всяких исходниках, но не знаю, что они делают! smile.gif

Автор: MacTep 23.7.2004, 08:49
Illusion Dolphin, в разделе Uses какой модуль добавить надо?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смысл моего вопроса таков: надо мне после сортировки НД при помощи запроса в TQuery поместить получившийся набор данных в TTable, чтобы дальше им манипулировать там. Вот!


Автор: gray_k 23.7.2004, 09:53
Цитата
получившийся набор данных в TTable, чтобы дальше им манипулировать там. Вот!

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

Автор: gray_k 23.7.2004, 10:27
Кстати ещё вариант - заполнить TClientDataSet, и произвести опрерации с ним. Затем при необходимости сохранить.

Автор: <Spawn> 23.7.2004, 10:48
Цитата
А почему нельзя манипулировать в TQuery?

Я вот тоже этого не понимаю. Все равно для манипуляции данными используется TDataSource, инкапсулирующий TDataSet, который собственно хранит и позволяет управлять полученым набором данных.

Автор: December 23.7.2004, 12:16
Цитата
А почему нельзя манипулировать в TQuery?

Потому что некоторые вещи (как это написано в хелпе) можно сделать именно с помощью TTable.
Цитата
что за процедуры такие, которые начинаются с dbi,

Это "низкоуровненвые" процедуры БДЕ. Справк по ним можешь почитать в хелпе по БДЕ.

Автор: Illusion Dolphin 23.7.2004, 16:57
MacTep
Цитата
в разделе Uses какой модуль добавить надо?

uses ...DBTables, BDE, ....;

Автор: MacTep 23.7.2004, 23:12
Еще вопрос: как при помощи TQuery добавить запись в таблицу? Знаю, что надо использовать запрос типа INSERT INTO <таблица> (список_полей) VALUES (список_значений). Но не знаю, как сделать так, чтобы вместо списка значений подставить переменные. Например, есть у меня форма, в которой я заполняю определенные поля данные из этих полей надо подставить в новую запись в таблицу. Как это сделать? Напишите примерный код запроса, пожалуйста!

Автор: gray_k 23.7.2004, 23:27
Код

qu.SQL.Clear;
qu.SQL.Add('insert into TABLE1(FIELD1, FIELD2) values(:par1, :par2)');
qu.ParamByName('par1').AsInteger := StrToInt(Edit1.Text);
qu.ParamByName('par2').AsString := Edit2.Text;
qu.ExecSQL;

Автор: MacTep 23.7.2004, 23:55
А вот за этот ответ просто огромнейшее спасибо! Супер! smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)