Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2007, 11:24   #1
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
Стрелка Проблема с параметрами при работе С ADO

Суть проблемы есть код:
DataModule5.ADOQuery1.Parameters.Ad dParameter.Name:='nomer';
DataModule5.ADOQuery1.Parameters.Pa ramByName('nomer').Value:=strtoint( nom);
ShowMessage(DataModule5.ADOQuery1.P arameters.ParamByName('nomer').Valu e);
DataModule5.ADOQuery1.SQL.Add('dele te zakaz.n_zakaza');
DataModule5.ADOQuery1.SQL.Add('from zakaz');
DataModule5.ADOQuery1.SQL.Add('wher e (((zakaz.n_zakaza)=[nomer]))');
DataModule5.ADOQuery1.Active:=true;
DataModule5.ADOQuery1.Active:=false ;
все вроде бы ничего, но при выолнении запроса выводится ошибка:
параметр [nomer] не имеет значения по умолчанию. Как решить проблему? Какое значение по умолчанию?
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 27.11.2007, 11:42   #2
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

DataModule5.ADOQuery1.SQL.Add('wher e (((zakaz.n_zakaza)=[nomer]))');

^^^
А так можно обращаться к значению параметра?

Я всегда считал что это делается так:

DataModule5.ADOQuery1.SQL.Add('wher e (((zakaz.n_zakaza)= :nomer))');
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.11.2007, 11:55   #3
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

Точно, как я мог это забыть. Стыдно. Теперь другая ошибка Объект или поставщик не может выполнить требуемую операцию. Как это так? ODBC же использую. конектюсь так:
const
ss = 'Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=%s;Persist Security Info=False';
var
path,path0,p: string; f:textfile;
begin
p:=GetCurrentDir;
if not FileExists(p+'\База\path.txt') then
begin
path0:= GetCurrentDir;
path:= path0 +'\База\db_kiosk.mdb';
assignfile(f,path0+'\База\path.txt' );
Rewrite(f);
write(f,path);
CloseFile(f);
end
else
begin
assignfile(f,GetCurrentDir+'\База\p ath.txt');
reset(f);
read(f,path);
CloseFile(f);
end;
try
ADOConnection2.ConnectionString:=Fo rmat(ss, [path]);
ADOConnection2.Open;
except
ShowMessage('Ошибка!');
exit;
end;
конектится нормально, но откуда такая ошибка?
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 27.11.2007, 12:53   #4
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от А. Долматов Посмотреть сообщение
Теперь другая ошибка Объект или поставщик не может выполнить требуемую операцию. Как это так? ODBC же использую. конектюсь так: ....
Не могу ничего сказать по этой ошибке. С acess не разбирался. Нужды не было.

Может прав не хватает?
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.11.2007, 13:10   #5
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

1.
Цитата:
DataModule5.ADOQuery1.SQL.Add('dele te zakaz.n_zakaza');
DataModule5.ADOQuery1.SQL.Add('from zakaz');
DataModule5.ADOQuery1.SQL.Add('wher e (((zakaz.n_zakaza)=[nomer]))');
Запрос должен быть вида:
Код:
DELETE FROM zakaz
WHERE n_zakaza = 12
2.
Цитата:
DataModule5.ADOQuery1.Active:=true;
DataModule5.ADOQuery1.Active:=false ;
запускать подобные запросы (не возвращающие "набор данных" (dataset), а возвращающие количество записей которые были обработанны данным запросом) на исполнение следует так:
Код:
  DataModule5.ADOQuery1.ExecSQL;
Aristarh Dark вне форума Ответить с цитированием
Старый 27.11.2007, 13:47   #6
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
Радость

Цитата:
Сообщение от А. Долматов Посмотреть сообщение
Суть проблемы есть код:
DataModule5.ADOQuery1.Parameters.Ad dParameter.Name:='nomer';
DataModule5.ADOQuery1.Parameters.Pa ramByName('nomer').Value:=strtoint( nom);
ShowMessage(DataModule5.ADOQuery1.P arameters.ParamByName('nomer').Valu e);
DataModule5.ADOQuery1.SQL.Add('dele te zakaz.n_zakaza');
DataModule5.ADOQuery1.SQL.Add('from zakaz');
DataModule5.ADOQuery1.SQL.Add('wher e (((zakaz.n_zakaza)=[nomer]))');
DataModule5.ADOQuery1.Active:=true;
DataModule5.ADOQuery1.Active:=false ;
все вроде бы ничего, но при выолнении запроса выводится ошибка:
параметр [nomer] не имеет значения по умолчанию. Как решить проблему? Какое значение по умолчанию?
Значения параметрам необходимо присваивать ПОСЛЕ! комманд add/text:=, которые напрочь затирают все предыдущие телодвижения, ака sql.clear. Cам имел неосторожность на эти грабли наступить.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 27.11.2007, 14:33   #7
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

Цитата:
DataModule5.ADOQuery1.ExecSQL;
пишет ошибку по адресу .....
Цитата:
Значения параметрам необходимо присваивать ПОСЛЕ! комманд add/text:=, которые напрочь затирают все предыдущие телодвижения, ака sql.clear. Cам имел неосторожность на эти грабли наступить.
замечание учел, но одинакого не работает. Записи не показывает.
проверял значение параметра заносится в переменную.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 27.11.2007, 14:44   #8
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
Вопрос

а с каких пор delete должен записи показывать? imho удаляет... показывает select... раньше показывал)))

Цитата:
Точно, как я мог это забыть. Стыдно. Теперь другая ошибка Объект или поставщик не может выполнить требуемую операцию. Как это так? ODBC же использую. конектюсь так:
а в какой строке ошибка возникает? на ??.udl тест проходит?
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось Alex21; 27.11.2007 в 15:30.
crazy horse вне форума Ответить с цитированием
Старый 27.11.2007, 15:00   #9
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

delete или select здесь не играет роли, т.к. по структуре оба запроса одинаковы
DataModule5.ADOQuery2.SQL.Add('SELE CT Zakaz.Kod, Zakaz.N_Zakaza AS [Номер заказа], Zakaz.Path AS Путь, Format.Format AS Формат, Paper.Paper AS Бумага, Zakaz.Kol AS Количество, Zakaz.Time AS Время, Zakaz.Cena AS Цена');
DataModule5.ADOQuery2.SQL.Add('FROM Paper INNER JOIN (Format INNER JOIN Zakaz ON Format.Kod_F = Zakaz.Kod_F) ON Paper.Kod_P = Zakaz.Kod_P');
DataModule5.ADOQuery2.SQL.Add('wher e Zakaz.N_Zakaza=:x');
DataModule5.ADOQuery2.Parameters.Pa ramByName('x').Value:=strtoint(nom) ;
Цитата:
а в какой строке ошибка возникает? на ??.udl тест проходит?
конектится нормально при выполнении запроса ошибка вылетает. я так понимаю, когда в аксесе тоже самое делаешь, то там он подтвеждение запрашивает. Возможно(хотя вряд ли я ведь не через аксес это делаю) в запросе нужно указать подтверждение.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 27.11.2007, 15:09   #10
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
конектится нормально при выполнении запроса ошибка вылетает. я так понимаю, когда в аксесе тоже самое делаешь, то там он подтвеждение запрашивает. Возможно(хотя вряд ли я ведь не через аксес это делаю) в запросе нужно указать подтверждение.
1) попробуйте те же запросы руками в sqlexplorer'e или любой другой среде жующей sql native.
2) а что у вас за база, если не секрет? есть ли права на запись у юзверя, от имени которого коннект? не стоит ли где-нибуть readonly?

Цитата:
Возможно(хотя вряд ли я ведь не через аксес это делаю) в запросе нужно указать подтверждение.
если не пользуете транзакции, то не нужно
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось Alex21; 27.11.2007 в 15:30. Причина: Используем кнопку "Редактировать". Подряд 2 однотипный сообщения не постим
crazy horse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки при работе запросов с параметрами Customer Microsoft Office Access 4 14.07.2008 20:35
ActiveX с параметрами Chainic Общие вопросы Delphi 2 28.05.2008 16:25
Проблема при работе с БД HAMMAN БД в Delphi 3 29.03.2008 14:42
проблема при работе с несколькими исходными файлами Grind Помощь студентам 2 19.02.2008 19:37
Проблема при работе с представлениями Nemec БД в Delphi 2 29.07.2007 04:21