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


Автор: Riddik 28.8.2008, 20:50
Здравствуйте!

Приложение на Delphi работает с базой MS Access.
Никакие запросы, кроме select, не работают.

Например, мне нужно запись из одной таблицы (table1) вырезать и вставить в другую таблицу (table2).

Делаю так:
Код

var
 xd: double;
...
xd:=ADOQuery1.Fields[1].AsFloat;   // запоминаем данные
ADOQuery1.SQL.CLEAR;
ADOQuery1.SQL.ADD('delete from table1 where POLE1=xd');     //удаляю запись, которую нужно перенести в другую таблицу
ADOQuery1.Active;
ADOQuery1.SQL.CLEAR;
ADOQuery1.SQL.ADD('insert into table2 (POLE2) values (xd)');   //добавляю новую запись
ADOQuery1.SQL.ADD('select * from table2');     //отображаем в гриде измененую таблицу.
ADOQuery1.Active;


Не работает! Что я делаю не так?

Автор: Данкинг 28.8.2008, 22:26
Дык, вроде это самое, а не .Active:

Код

ADOQuery1.ExecSql;

Автор: Rodman 28.8.2008, 22:35
памятка:

для открытия используется - OPEN (иногда Active)
для изменения (это изменение, удаление, добавлени) используется - EXECSQL

Автор: Riddik 28.8.2008, 23:56
Огромное спасибо!

Я поменял  Active на EXECSQL,  но тут при выполнении приведённых строк кода возникает сообщение об ошибке, что параметр xd не имеет значения по умолчанию и программа прерывается.
Что делать - я проверял: в xd содержится то, что нужно.

Добавлено через 3 минуты и 41 секунду
Если дословно: Проект .exe вызвал исключение класса EOleException с сообщением 'Параметр xd не имеет значения по умолчанию'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.

Автор: Данкинг 29.8.2008, 00:36
Цитата(Riddik @  29.8.2008,  00:56 Найти цитируемый пост)
сообщение об ошибке, что параметр xd не имеет значения по умолчанию и программа прерывается.

Видимо, в какой-то записи значение данного поля просто отсутствует, проверь. А вообще, так лучше юзать:

Код

xd:=ADOQuery1.Fields.FieldByNumber(1).AsFloat;

Автор: pseud 29.8.2008, 09:40
а если так:
Код

var
  xd: string;
begin
  ...
  xd := ADOQuery1.Fields[1].AsString;   
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('delete from table1 where POLE1 = ' + xd);
  ADOQuery1.ExecSQL;


  

Автор: Данкинг 29.8.2008, 11:07
Цитата(pseud @  29.8.2008,  10:40 Найти цитируемый пост)
а если так:

А зачем тип данных менять? Да и кавычки же тогда нужно, если стринговая переменная. 

Автор: pseud 29.8.2008, 11:24
ай ай ай

Цитата(Данкинг @  29.8.2008,  11:07 Найти цитируемый пост)
А зачем тип данных менять?

а чтоб потом не делать FloatToStr()  smile 

Цитата(Данкинг @  29.8.2008,  11:07 Найти цитируемый пост)
Да и кавычки же тогда нужно, если стринговая переменная. 

но поле то POLE1 не стринговое, поэтому кавычек не нужно   smile

Добавлено через 1 минуту и 52 секунды
единственная проблема может возникнуть, если разделитель_десятичных_знаков на запускающем компе и на сервере БД разные.
но это другая история  smile 

Автор: Данкинг 29.8.2008, 12:48
Цитата(pseud @  29.8.2008,  12:24 Найти цитируемый пост)
но поле то POLE1 не стринговое, поэтому кавычек не нужно 

И то верно. smile 

Цитата(pseud @  29.8.2008,  12:24 Найти цитируемый пост)
единственная проблема может возникнуть, если разделитель_десятичных_знаков на запускающем компе и на сервере БД разные.
но это другая история

Да не совсем другая, это тоже в проге надо учесть будет, дабы потом косяки не разгребать. smile 

Автор: Riddik 29.8.2008, 19:12
Большое вам всем спасибо!

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