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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2008, 18:40   #11
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
пишет все ту же ошибку: Could not convert variant of type(string) into type (double).
Это значит, что параметр и присваеваемое ему значение имеют разные типы данных. StrToFloat вам поможет.
edgy вне форума Ответить с цитированием
Старый 22.07.2008, 18:57   #12
shosse
Пользователь
 
Регистрация: 22.07.2008
Сообщений: 12
По умолчанию

to ШАНИ

Запрос должен выглядеть так:
ADOQuery1.SQL.Add('Insert Into Table Sources(SourceName,SourceTypeID) Values (char(39)+eSourceName.Text+char(39)+','+DBLcbSourceType.KeyValue+')');

Знак апостроф (') в Delphi воспринимается как начало текстовой строки, а по синтаксису SQL нужно в запросе применять его, а не ковычки. Если написать '+eSourceName.Text+', то в таблицу будет добавлена строка +eSourceName.Text+

Последний раз редактировалось shosse; 22.07.2008 в 19:14.
shosse вне форума Ответить с цитированием
Старый 22.07.2008, 19:08   #13
Шани
Пользователь
 
Регистрация: 25.07.2007
Сообщений: 12
По умолчанию

edgy, StrToFloat-то я знаю, но дело в том, что ни одного дробного параметра у меня нет.
Заменила кавычки на char(39) - то же самое.
Т.к. после работы мозг уже не совсем адекватный, то на всякий случай: теперь это выглядит так:
Код:
ADOQuery1.SQL.Add('Insert Into Table Sources(SourceName,SourceTypeID) Values('+char(39)+eSourceName.Text+char(39)+','+DBLcbSourceType.KeyValue+')');
Шани вне форума Ответить с цитированием
Старый 22.07.2008, 19:15   #14
shosse
Пользователь
 
Регистрация: 22.07.2008
Сообщений: 12
По умолчанию

Данный параметр DBLcbSourceType.KeyValue текстовый или числовой???

Завтра посмотрю правильный синтаксис написания команды INSERT. Смущает также параметр Sources.

Последний раз редактировалось shosse; 22.07.2008 в 19:28.
shosse вне форума Ответить с цитированием
Старый 22.07.2008, 19:33   #15
Шани
Пользователь
 
Регистрация: 25.07.2007
Сообщений: 12
По умолчанию

DBLcbSourceType.KeyValue типа variant. Числовым его сделать не проблема. Как тогда правильно сформировать запрос?

* спасибо большое, что помогаете
Шани вне форума Ответить с цитированием
Старый 22.07.2008, 19:59   #16
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Кстати, тоже обратил внимание - что такое Table Sources? Это такое название у таблицы? Или все же она называется "Sources"?
Попробуйте такой код:
Код:
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'INSERT INTO Sources( SourceName, SourceTypeID ) VALUES( :SrcName, :SrcTypeId )';
  ADOQuery1.Parameters.Refresh;
  ADOQuery1.Parameters.ParamByName( 'SrcName' ).Value := eSourceName.Text;
  ADOQuery1.Parameters.ParamByName( 'SrcTypeId' ).Value := DBLcbSourceType.KeyValue;
  ADOQuery1.ExecSQL;
edgy вне форума Ответить с цитированием
Старый 23.07.2008, 10:27   #17
Mitriy08
Пользователь
 
Регистрация: 11.07.2008
Сообщений: 91
По умолчанию

Цитата:
ADOQuery1.SQL.Add('Insert Into Table Sources(SourceName,SourceTypeID) Values('+char(39)+eSourceName.Text+ char(39)+','+DBLcbSourceType.KeyVal ue+')');
Чтобы ты сдесь не писал, в итоге у тя должна получится строка.
Переведи вот это - DBLcbSourceType.KeyValue в текст и должно все работать.
Mitriy08 вне форума Ответить с цитированием
Старый 23.07.2008, 16:24   #18
Шани
Пользователь
 
Регистрация: 25.07.2007
Сообщений: 12
По умолчанию

Благодарю всех за помощь! Сегодня на работе разобралась, все заработало. А сделала в итоге так:
Код:
st := DBLcbSourceType.KeyValue; //st - типа integer
                ADOQuery1.SQL.Clear;
                ADOQuery1.SQL.Add('Insert Into Sources(SourceName,SourceTypeID) Values( :Name, :Type)');
                ADOQuery1.Parameters.ParamByName('Name').Value := eSourceName.Text;
                ADOQuery1.Parameters.ParamByName('Type').Value := st;
                ADOQuery1.ExecSQL;
                ADOQuery1.Close;
Все-таки слово "Table" там было лишнее %)
Шани вне форума Ответить с цитированием
Старый 23.07.2008, 20:38   #19
shosse
Пользователь
 
Регистрация: 22.07.2008
Сообщений: 12
Хорошо

Или можно так:

var s:string;
i:integer;
begin
s:='Привет';
i:=110;
qr.sql.clear;
qr.sql.add('INSERT INTO test (str,ut) VALUES ("'+s+'",'+inttostr(i)+')');
qr.execsql;
end;
shosse вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод Close для ADODataSet вызывает ошибку 'BOF или EOF имеет ...' (mdac 6.0) jane БД в Delphi 1 16.07.2008 07:34
ошибка с FilterOptions в ADODataSet (FilterOption are not suppoted) VVk БД в Delphi 2 08.12.2007 17:00
свойство ADOdataSET.CommandTimeout не работает _liv_ БД в Delphi 0 30.10.2007 14:54
ADODataSet: cannot modify a read-only dataset cvetochek Помощь студентам 2 29.10.2007 14:49
idudpserver+mssql+adodataset vodila БД в Delphi 1 11.08.2007 09:56