|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Копирование в пределах одной таблицы
Задача такая есть база в MS Access нашел исходник который копирует запись:
Код:
var i: Cardinal; srcStream: TBlobStream; begin try with datamodule4.ADOTable1 do begin CheckBrowseMode; if EOF or BOF then raise Exception.Create('Разместите курсор на правильной строке'); end; with datamodule4.ADOTable2 do begin Append; for i := 0 to datamodule4.ADOTable1.FieldCount - 1 do if datamodule4.ADOTable1.Fields[i].DataType < ftBytes then FieldByName(datamodule4.ADOTable1.Fields[i].FieldName).Assign(datamodule4.ADOTable1.Fields[i]) else try srcStream := nil; srcStream := TBlobStream.Create(TBlobField(datamodule4.ADOTable1.Fields[i]), bmRead); TBlobField(FieldByName(datamodule4.ADOTable1.Fields[i].FieldName)).LoadFromStream(srcStream); finally if Assigned(srcStream) then srcStream.Free; end; Post; datamodule4.ADOtable1.Active:=false; datamodule4.ADOtable1.Active:=true; end; except on E: EDBEngineError do MessageDlg(E.Message, mtError, [mbOk], 0); on E: Exception do MessageDlg(E.Message, mtError, [mbOk], 0); end; end; выводит ошибку: First chance exception at $7C81EB33. Exception class EInvalidCast with message 'Invalid class typecast'. Process Project1.exe (2712) в чем моя ошибка подскажите пожалуйста... |
#2
|
||||
|
||||
Ну что не кто не может помочь что-ли....????
|
#3
|
||||
|
||||
А вы уверены, что у вас точно blob поле попадает в ваше условие?
Не нравится мне такая запись: Код:
if datamodule4.ADOTable1.Fields[i].DataType < ftBytes then ... else Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
хм незнаю этот исход работает с простым table1 а с ADO не хочет...
Может вы подскажите другой метод копирования? |
#5
|
||||
|
||||
Самое очевидное воспозоваться запросом на вставку записи.
Код:
insert into UserTable from select * from UserTable where id=10 Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
Я использую ADOTable а не ADOQuery
Попытлся с помощью ADOTable Код:
procedure TForm3.ToolButton19Click(Sender: TObject); var s,d,f,g,h,j: string; a:integer; begin s:= datamodule4.ADOTable1.Fields.Fields[1].AsString; d:= datamodule4.ADOTable1.Fields.Fields[2].AsString; f:= datamodule4.ADOTable1.Fields.Fields[3].AsString; g:= datamodule4.ADOTable1.Fields.Fields[4].AsString; h:= datamodule4.ADOTable1.Fields.Fields[5].AsString; j:= datamodule4.ADOTable1.Fields.Fields[6].AsString; datamodule4.ADOTable1.Last; a:= (datamodule4.ADOTable1.Fields.Fields[0].AsInteger + 1); datamodule4.ADOTable1.Active:=false; datamodule4.ADOTable2.Active:=true; datamodule4.ADOTable2.Insert; datamodule4.ADOTable2.Fields.Fields[0].AsInteger:=a; datamodule4.ADOTable2.Fields.Fields[1].AsString:=s; datamodule4.ADOTable2.Fields.Fields[2].AsString:=d; datamodule4.ADOTable2.Fields.Fields[3].AsString:=f; datamodule4.ADOTable2.Fields.Fields[4].AsString:=g; datamodule4.ADOTable2.Fields.Fields[5].AsString:=h; datamodule4.ADOTable2.Fields.Fields[6].AsString:=j; datamodule4.ADOTable2.Post; datamodule4.ADOTable2.Active:=false; datamodule4.ADOTable1.Active:=true; datamodule4.ADOtable1.Active:=false; datamodule4.ADOtable1.Active:=true; |