Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Insert into...


Автор: kulikoff 24.12.2005, 21:43
У меня есть два файла dbf & db. Хожу через BDE. Необходимо данные из одного файла перелить в другой. Пишу запрос вида:
Код

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='insert into "D:\MyDatabase\proba2.db" (ZKPO, SUMMA) select ZKPO, S from "D:\MyDatabase\BANK2410.dbf"';
Query1.Prepare;
Query1.ExecSQL;

всё работает отлично. Но мне надо сделать построчную запись в таблицу (для того, чтоб прикрутить ПрогрессБар), переписываю запрос в два следующим образом:
Код

var i: integer;
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Text:='select ZKPO, S from "D:\MyDatabase\BANK2410.dbf"';
  Query1.Prepare;
  Query1.Open;
  Query2.Close;
  for i:=0 to Query1.RecordCount-1 do
    begin
      Query2.SQL.Clear;
      Query2.SQL.Text:='insert into "D:\MyDatabase\proba2.db" (ZKPO, SUMMA) values (:param1, :param2)';
      Query2.ParamByName('param1').AsInteger:=Query1.Fields[0].AsInteger;
      Query2.ParamByName('param2').AsInteger:=Query1.Fields[1].AsInteger;
      Query2.Prepare;
      Query2.ExecSQL;
      Query1.Next;
    end;
  Query2.close;


Не хочет работать smile . Пишет, что "Type mismatch in expression". Как такое возможно, учитывая, что первый запрос работает на отлично? Что во втором неправильно?

Автор: FRAGNATIC 24.12.2005, 22:15
а зачем на столько замедлять приложение ради прогресбара?
новерное лучше будет сделать прогресбар на подобии того что идёт при загрузке винды тоесть пару чёрточек по гругу бегают до тех пор пока не выполнится твой запрос да и всё =)

Автор: kulikoff 24.12.2005, 22:57
Да просто мне надо ещё, чтоб писало что-то наподобие такого: "Обработано 12 строк из 200", ну и менялось кол-во строк... А быстродействие особой роли не играет... Хотя, а как можно сделать бегунок наподобие винды? гиф-анимацию просто вставить или как?

Автор: offline 25.12.2005, 11:23
Код

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Text:='select ZKPO, S from "D:\MyDatabase\BANK2410.dbf"';
  Query1.Prepare;
  Query1.Open;
  Query1.First;
  ProgressBar1.Position := 0;
  ProgressBar1.Max := Query1.RecordCount;
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.Text:='insert into "D:\MyDatabase\proba2.db" (ZKPO, SUMMA) values (:param1, :param2)';
  while not Query1.EOF do begin
   Application.ProcessMessages;
   ProgressBar1.Position := Query1.RecNo;
   Label1.Caption := IntToStr(Query1.RecNo) + ' из ' +IntToStr(Query1.RecordCount);
   if Query2.Open then Query2.Close;
   Query2.ParamByName('param1').AsInteger:=Query1.Fields[0].AsInteger;
   Query2.ParamByName('param2').AsInteger:=Query1.Fields[1].AsInteger;
   Query2.Prepare;
   Query2.ExecSQL;
   Query1.Next;
   end;
  Query2.close;
  Query1.close;
  ProgressBar1.Position := 0;
  Label1.Caption := '';


что-то типа этого

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