![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с ADO под SQL Server 2000 [D6, MSSQL]
AlexGof © (2003-04-08 10:43:00)Проблема такая. Отключаю Identity в таблице вот так: ADOCommand.CommandText:="SET IDENTITY_INSERT "+nbase+" ON";
ADOCommand.Execute;
Затем в ADODataset в колонку с Identity пытаюсь вставить значение из другой таблицы, но вылезает ошибка "колонка не может быть редактирована". Использовать ADODataSet для вставки записи приходиться потому, что перегоняю данные из InterBase базы в MS SQL Server, базы полностью идентичны. Т. е. я по имени поля из таблицы InterBase нахожу такому же имени поля в такой же таблице MS SQL и присваиваю ему значение. Может можно и по другому как то сделать или Identity в ADODataSet настроить ? Подскажите кто знает. Заранее благодарен.
AlexGof (2003-04-08 12:57:00) [1]sniknik большое спасибо !!!
sniknik (2003-04-08 12:32:00) [2]лутше так, перед циклом
ADOCommand.CommandText:="Insert into nbase(["+d.Field[i].FieldName+"],"+...") values("+":Par"+IntToStr(i)+","+....")
а после только подставлять параметры
for i ...
ADOCommand.Parameters.[i].DataType:= := d.Fields[i].DataType;
ADOCommand.Parameters[i].Value:= d.Fields[i].Value
....
AlexGof (2003-04-08 12:11:00) [3]я еще раз извиняюсь, но не могу понять как это сделать
Insert into nbase(d.Fields[i].FieldName) values(
ADOCommand.CommandText:="Insert into nbase("+d.Field[i].FieldName+") values("+d.Field[i].Value+") ?
тип то поля неизвестен если Data то "25.05.03", строковый так вставляется тоже в кавычках, а если int ? как в раздел инсерта Values вставить величину поля ? Как выполнить преобразование типов ? Ведь просто "+d.Field[i].Value+" нельзя написать, тип ведь каждый раз разный !
stone (2003-04-08 11:52:00) [4]
> а какого типа сюда я вставлю величину, как это описать ?)
d.Fields[i].DataType
AlexGof (2003-04-08 11:37:00) [5]Да инсертом вставится конечно, но у меня есть две одинаковые таблицы Interbase и MS SQL и записи я перегоняю из них следующим образом :
1. Передаю имя таблицы в набор DataSet=d Interbase и ADODataSet=q и открываю селектом их
потом
d.First;
if not t.InTransaction then t.BeginTrans
else t.CommitTrans;
while not d.Eof do
begin
q.Edit;
q.Append;
for i:=0 to d.FieldCount-1 do
begin
name:= d.Fields[i].FieldName;
q.FieldByName(name).Value:= d.Fields[i].Value;
end;
q.Post;
d.Next;
end;
t.CommitTrans;
а как я смогу использовать инсерт если мне заранее не известен в этом цикле тип поля ?
Insert into nbase(d.Fields[i].FieldName) values(а какого типа сюда я вставлю величину, как это описать ?)
или ты знаешь как это по другому можно реализовать ?
ЮЮ (2003-04-08 11:30:00) [6]Насколько знаю аглицкий, ON всегда было ВКЛЮЧИТЬ, а выключить - OFF. Is not it?
sniknik (2003-04-08 11:18:00) [7]надо инсертами вставлять, готовить на каждую запись команду INSERT INTO (или через временную таблицу чтобы одним обойтись).
stone (2003-04-08 10:47:00) [8]Возможно проблема неявном старте транзакции