Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

Работа с 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
3-76765
Aleksandr
2003-04-08 15:05
2003.04.24
Есть ли альтернативные способы сброса таблицы MSSQL в Paradox?


4-77247
Sabor
2003-02-25 16:33
2003.04.24
Проблема с часами


3-76859
Stas
2003-04-08 09:58
2003.04.24
Перекрестный запрос


3-76835
RI
2003-04-07 01:02
2003.04.24
Blob и большие файлы


1-77021
777
2003-04-14 02:32
2003.04.24
Сервис