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

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

Работа с 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]

Возможно проблема неявном старте транзакции


Наверх

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