Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi 7 +ADO+ MSSQL 7.0 [D7, MSSQL]


Glorfindel ©   (2004-03-30 17:03:00) 

Использую для подключения к БД ADO...
лежат значит компонентики ADOConnection и ADOQuery...
в ADOConnection прописываю строку конекта и всё замечательно.
ADOConnection.Active:=true; всё прекрасно подключаюсь к БД.
теперь мне нужно ввести в БД данные... вот такой запрос у меня вышел
INSERT INTO t_client (name1r, name2r, name3r, name1e, name2e, name3e, name4r, name4e, pass1, pass2, dbirth, adress1, adress2, adress3, adress4, tel1, tel2, login, date, time) VALUES('1','2','3','4','5','6','7','8','9','10',27/03/2004,'12','13','14','15','16','17','abykov',29/03/2004,'16:04:49')  
все поля кроме dbirth и date(они DateTime) varchar'ы... вот

я так сделал...
описал название и тип ADOQuery.parameters...
потом
form1.ADOQuery1.Parameters.ParamByName('dbirth').Value:=DateTimePicker1.Date;так заполняю значения...
потом пишу так

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('INSERT INTO t_client (name1r, name2r, name3r, name1e, name2e, name3e, name4r, name4e, pass1, pass2, dbirth, adress1, adress2, adress3, adress4, tel1, tel2, login, dtnow)');
form1.ADOQuery1.SQL.Add(' VALUES (:name1r, :name2r, :name3r, :name1e, :name2e, :name3e, :name4r, :name4e, :pass1, :pass2, :dbirth, :adress1, :adress2, :adress3, :adress4, :tel1, :tel2, :login, :dtnow)');
form1.ADOQuery1.Active:=true;
вот... и мне пишет что мол ошибка ололо line2 incorrect syntax near ':''
вот

говорят у меня не видит параметров, т.к. ADOQuery лежит в Unit1 и яв unit2 делаю усе.... но в Unit1 прописан USES unit2....

////
почему может не видеть параметры.. параметры прописывал их имена в инспекторе.. м\б явно нужно написать их тип и не юзать имена а по индексам??


bushmen   (2004-03-31 15:08:00) [1]

Да я ему уже на sql.ru замучался это объяснять. Ну, не хочет человек этого понять и все!


KSergey   (2004-03-31 14:48:00) [2]

Да, и не забыть про

> [1] bushmen ©   (30.03.04 17:08)


KSergey   (2004-03-31 14:47:00) [3]

До form1.ADOQuery1. Active:=true; надо параметры заполнять!!!

И обязательно еще сразу после заполнения запроса (перед ParamByName().Value:=..) сделать
form1.ADOQuery1.Parameters.ParseSQL(ADOQuery1.Text, True);

а иначе никаких параметров и в помине не будет.
Ну либо ручками их понапендюрить - но небрагодарное это дело...

А вообще - ну раз формируете SQL ручками - нафига с параметрами этими маяться? не проще ли сразу полный нормальный текст формировать, подставляя нужные значения в текст? По мне так наамного проще.


sniknik   (2004-03-31 14:22:00) [4]

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


Glorfindel   (2004-03-31 14:06:00) [5]


> sniknik ©   (30.03.04 23:51) [3]
> ? но почему у меня он пишет ошибку в SQL синтаксисе??? =((((
> а ты бы не ругался если бы вместо ожидаемой зарплаты получил
> конвертик под нее? ;о)
>
> а ведь оно ожидает в момент открытия (form1.ADOQuery1.Active:=true;)
> что все будет заполнено.


дело в том что он даже не хочет делать Activ:=true; он грит типа ошибка синтаксиса около ':' вот


sniknik   (2004-03-30 23:51:00) [6]

? но почему у меня он пишет ошибку в SQL синтаксисе??? =((((
а ты бы не ругался если бы вместо ожидаемой зарплаты получил конвертик под нее? ;о)

а ведь оно ожидает в момент открытия (form1.ADOQuery1.Active:=true;) что все будет заполнено.


Glorfindel   (2004-03-30 20:25:00) [7]


> Вам говорили другое - Вы пытаетесь сначала параметрам присвоить
> значения, а потом запрос пишите. А потом, Вы пытаетесь выполнить
> запрос, который ничего не возвращает, а используете Active.
> Надо использовать ExecSQL
>
> Form1.ADOQuery1.ExecSQL;

т.е. в начале надо написать

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('INSERT INTO t_client (name1r, name2r, name3r, name1e, name2e, name3e, name4r, name4e, pass1, pass2, dbirth, adress1, adress2, adress3, adress4, tel1, tel2, login, dtnow)');
form1.ADOQuery1.SQL.Add(' VALUES (:name1r, :name2r, :name3r, :name1e, :name2e, :name3e, :name4r, :name4e, :pass1, :pass2, :dbirth, :adress1, :adress2, :adress3, :adress4, :tel1, :tel2, :login, :dtnow)');
form1.ADOQuery1.Active:=true;
near ':''

вот... и мне пишет что мол ошибка ололо line2 incorrect syntax
.....................
а потом orm1.ADOQuery1.Parameters.ParamByName('dbirth').Value:=DateTimePicker1.Date;так заполняю значения...

так?
но почему у меня он пишет ошибку в SQL синтаксисе??? =((((


bushmen   (2004-03-30 17:08:00) [8]

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

Form1.ADOQuery1.ExecSQL;


Наверх

Титульная страница Поиск, карта сайта Написать письмо