сохранение record-переменной в БД
От: axiv  
Дата: 23.03.10 14:41
Оценка:
Здравствуйте. Помогите, измучился уже весь.
Есть TMyRec=record состоящий из полей типов integer, record, set и перечислений. Итого sizeof(TRec)=48
Вопросы в следующем:
1. Как запихнуть переменную такого типа в таблицу?
Пробовал так:
var oc:TMyRec;
    with ADOQuery1 do
    begin
      Active:=false;
      SQL.clear;
      SQL.add('INSERT INTO tmpTable (col1) VALUES(:col1)');      
      fs:=TMemoryStream.create;
      fs.WriteBuffer(oc,sizeof(oc));
      parameters.parambyname('col1').loadfromStream(fs,smReadWrite);      
      ExecSQL;
      fs.free;
    end;

Сохраняет, но как выдернуть обратно
2. Какой тип данных использовать для поля таблицы(MSSQLServer2005)?
Использовал и varbinaries, ntext, varchar, но результат один и тот же
3. Как извлечь из БД данные и запихнуть её опять в переменную?
Пробовал так:
with ADOQuery1 do
    begin
      Active:=false;
      SQL.clear;
      SQL.add('select * from tmp'); --На самом деле там пока одна запись
      active:=true;
      GetMem(buff,sizeof(oc)+1);
      ADOQuery1.Fields[0].GetData(buff,true);
      fs:=TMemoryStream.create;
      fs.WriteBuffer(buff,sizeof(oc));
      fs.seek(0,soFromBeginning);
      fs.readBuffer(oc,sizeof(oc));
      fs.free;      
    end;
record loadfromstream
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.