![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с SQL - INSERT, [D7, XP]
Wood © (2007-05-11 10:43:00)пожалуйста.
Delphi->ADO->MS Access
поле [0] (NUM) индексированное с первичным ключем, тип - счетчик.
поле [1] (name_k) - текстовое.
INSERT INTO mybase (num,name_k) VALUES (:num,:name_k);
ADOCommand.Parameters.Clear;
ADOCommand.Parameters.CreateParameter('num',ftAutoInc, pdInput, -1, < что здесь указать?>);
ADOCommand.Parameters.CreateParameter('name_k',ftString,pdInput, -1, 'Имя');
...
вообщем, по моему, я неправильно делаю.. Значение поля num еще не определено..
Подскажите, как правильно выполнить вставку записи при использовании поля, типа "счетчик".
Заранее благодарю.
Wood (2007-05-11 13:43:00) [1]Спасибо всем за помощь! :)
Anatoly Podgoretsky (2007-05-11 13:19:00) [2]> Wood (11.05.2007 12:15:08) [8]
Если ты изменишь запрос, то
твой Parameters[0]. вполне полетит к
черту.
Anatoly Podgoretsky (2007-05-11 13:18:00) [3]> Wood (11.05.2007 12:00:04) [4]
Как это не знаешь, как же
тогда создаешь.
Для присвоения параметров
используй
ADOCommand.Parameters.ParamByName
ЮЮ (2007-05-11 12:33:00) [4]> Правильно.
> Хотя иногда неплохо бы ещё перед присваивание значения
> ADOCommand.Parameters.ParamByName(...).DataType:=...
Если значение параметру присваивается, то и тип присвоится, если справа все правильно.
А вот для неприсвоенных - тип, ИМХО, гораздо важнее.
Johnmen (2007-05-11 12:25:00) [5]
> Wood (11.05.07 12:15) [8]
Правильно.
Хотя иногда неплохо бы ещё перед присваивание значения
ADOCommand.Parameters.ParamByName(...).DataType:=...
Ega23 (2007-05-11 12:22:00) [6]
> ADOCommand.Parameters[0].Value:=<var name>
В принципе правильно. Но лично я предпочитаю через ParamByName обращаться.
Wood (2007-05-11 12:15:00) [7]Ох-хо!! Надеюсь, я правильно понял!
Так к примеру:
ADOCommand.CommandText:='INSERT INTO mybase (name_k) VALUES (:name_k);
ADOCommand.Parameters[0].Value:=<var name>
и не нужно ADOCommand.Parameters.Clear!
Desdechado (2007-05-11 12:12:00) [8]Обычно проще включить свойство ParamCheck, что вызывает автоматическое создание параметров по символу двоеточия в тексте запроса.
И незачем лепить их вручную.
И динамически их создастся столько, сколько двоеточий в запросе.
ЮЮ (2007-05-11 12:11:00) [9]>Если у меня параметры создаются динамически и я не знаю пока, сколько их будет?...
Их будет ровно столько, сколько в тексте запроса встретится комбинация :<параметр>. А если бы их там не было, то к чему ADOCommand.Parameters.Clear;?
Johnmen (2007-05-11 12:09:00) [10]ADOCommand.CommandText:='INSERT INTO mybase (name_k) VALUES (:name_k);
всё, коллекция параметров создана. заново.
> Если у меня параметры создаются динамически и я не знаю
> пока, сколько их будет?...
Это знает текст запроса.
Wood (2007-05-11 12:00:00) [11]
> Johnmen © (11.05.07 11:52) [3]
>
> Нет.
> Две последнии строки ни к селу ни к ж..е :)))
>
почему? Не могли бы вы объяснить? А еще лучше показать на примере, как правильно.
Кстати, почему именно неправильно?Может быть не целесообразно, скорее?
А если будет
ADOCommand.Parameters.CreateParameter('name_k',ftString,pdInput, -1, <здесь имя переменной>);
то так правильно?
Если у меня параметры создаются динамически и я не знаю пока, сколько их будет?...
Johnmen (2007-05-11 11:52:00) [12]
> целиком так, правильно?
Нет.
Две последнии строки ни к селу ни к ж..е :)))
Wood (2007-05-11 11:02:00) [13]
> Sergey13 © (11.05.07 10:47) [1]
Спасибо!
INSERT INTO mybase (name_k) VALUES (:name_k);
ADOCommand.Parameters.Clear;
ADOCommand.Parameters.CreateParameter('name_k',ftString,pdInput, -1, 'Имя');
целиком так, правильно?
Sergey13 (2007-05-11 10:47:00) [14]> [0] Wood (11.05.07 10:43)
> INSERT INTO mybase (num,name_k) VALUES (:num,:name_k);
ну так раз счетчик, зачем ты в него пишешь?
INSERT INTO mybase (name_k) VALUES (:name_k)