• Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

Помогите создать динамический запрос

  • Автор темы Автор темы E_Korobko
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
E

E_Korobko

Здраствуйте!
Помогите, пожалуйста, наладить динамический запрос.
Мне необходимо в программке создавать табличку с определенными полями, а потом из другого файла выбранные файлы перенести в эту табличку(kiosk.db).
Привожу фрагментики программы:

{создаем файл}
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('create table kiosk');
Query1.SQL.Add('(Kiosk char(15),Summa money,primary key(kiosk))');
Query1.ExecSQL;
...

{выборка из другой таблички}
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select P.Kiosk,sum(P.summa)');
Query1.SQL.Add('from "pdoxvtor.db" as P');
Query1.SQL.Add('group by P.kiosk');
Query1.Open;

{заносим в файл отобранные поля таблички}
s1 := 'C:\Program Files\Borland\Delphi6\Projects\Kiosk\kiosk.db';
AssignFile(p, s1);
while not Query1.Eof do
begin
if (FileExists(s1)=true) then Append(p)
else Rewrite(p);
write(p,Query1.FieldByName('Kiosk').AsString);
write(p,' ');
writeln(p,Query1.FieldByName('SUM OF Summa').AsString);
Query1.next;
end;
System.CloseFile(p);

ошибок нет, но файл создается с одним символов и содержит только заголовки таблицы.
Без блока с create table все создается, но в DataBase Desktopе не открывается: пишет, что не подходящий формат, хотя расширение *.db, нет заголовков таблицы.
 
Вот эти строчки как минимум надо вынести из цикла:

Код:
if (FileExists(s1)=true) then Append(p)
else Rewrite(p);
 
Не-а, не помогает. А можно ли вообще в созданній файл при помощи create table дописывать записи при помощи write или есть другие способы.
Я мучаюсь с этим давно, перебирала варианты, но пока ничего не получается.
 
и еще небольшая просьбочка: порекомендуйте мне, пожалуйста, хорошую литературу по Delphi с базами данных, желательно печатанный вариант.
Зараннее благодарна!
 
Я больше по С, но попробуй перед while поставить Query1.First();
 
Query.First не поможет потому как курсор после открытия стоит на первой записи.

Вопрос к Вам.. а какую базу данных Вы используете ?
Просто как-то трудно угадать Ваши манипуляции.. и по коду не понятно где Вы создаёте Вашу таблицу и зачем потом пишите поля в файл в расширением db.

Если Вы хотите перенести записи из одной таблицы в другу ю поспользуйтесь командой INSERT и средствами работы с базами данных...
 
И через insert не получается. Может что-то не так делаю:
create table kiosk (kiosk char(15),summa money, primary key(kiosk));
insert into lyalya values ("fglgjhlgkj",1.2);

ошибка Invalid use of keyword token: insert.

Хотя по литературе все верно. :(
 
Хммм..

insert into lyalya values ("fglgjhlgkj",1.2);

Что-то мне кажется что после INSERT INTO должно идти имя таблицы куда вставляется...

К тому же делать первичный ключ по строковому полю .. не совсем правильно это ...

Я надеюсь Вы INSERT и CREATE выполняли разными командами?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!