Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];
ВнизРабота с ADO под SQL Server 2000 Найти похожие ветки
← →
AlexGof (2003-04-08 10:43) [0]Проблема такая. Отключаю Identity в таблице вот так: ADOCommand.CommandText:="SET IDENTITY_INSERT "+nbase+" ON";
ADOCommand.Execute;
Затем в ADODataset в колонку с Identity пытаюсь вставить значение из другой таблицы, но вылезает ошибка "колонка не может быть редактирована". Использовать ADODataSet для вставки записи приходиться потому, что перегоняю данные из InterBase базы в MS SQL Server, базы полностью идентичны. Т. е. я по имени поля из таблицы InterBase нахожу такому же имени поля в такой же таблице MS SQL и присваиваю ему значение. Может можно и по другому как то сделать или Identity в ADODataSet настроить ? Подскажите кто знает. Заранее благодарен.
← →
stone (2003-04-08 10:47) [1]Возможно проблема неявном старте транзакции
← →
sniknik (2003-04-08 11:18) [2]надо инсертами вставлять, готовить на каждую запись команду INSERT INTO (или через временную таблицу чтобы одним обойтись).
← →
ЮЮ (2003-04-08 11:30) [3]Насколько знаю аглицкий, ON всегда было ВКЛЮЧИТЬ, а выключить - OFF. Is not it?
← →
AlexGof (2003-04-08 11:37) [4]Да инсертом вставится конечно, но у меня есть две одинаковые таблицы 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(а какого типа сюда я вставлю величину, как это описать ?)
или ты знаешь как это по другому можно реализовать ?
← →
stone (2003-04-08 11:52) [5]
> а какого типа сюда я вставлю величину, как это описать ?)
d.Fields[i].DataType
← →
AlexGof (2003-04-08 12:11) [6]я еще раз извиняюсь, но не могу понять как это сделать
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+" нельзя написать, тип ведь каждый раз разный !
← →
sniknik (2003-04-08 12:32) [7]лутше так, перед циклом
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:57) [8]sniknik большое спасибо !!!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c