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

Вниз

InsertRecord   Найти похожие ветки 

 
Vir   (2004-08-22 01:45) [0]

В рантайме нужно добовальть запись в ClientDataSet.
функции передается Array of Const.
Поскольку количество полей заранее не известно то Array of Const динамически создаю.
И где-то ошибся с выделением памяти
вот кусок кода.


var i:integer;
   value,fname:string;
   rec:array of TVarRec ;
   p_value:Pchar;
begin
SetLength(rec,GoodsGrid.FieldCount-1);
for i:=0 to GoodsGrid.FieldCount-1 do
 begin
 fname:=GoodsGrid.Fields[i].FieldName;
 if DataForm.GoodsQuery.FieldByName(fname).Value<>NULL
   then value:=DataForm.GoodsQuery.FieldByName(fname).Value
   else value:="NULL!";
 p_value:=StrAlloc(length(value));
 FillMemory(p_value,length(value)+1,0);
 MoveMemory(p_value,@value[1],length(value));
 rec[i].VType:=6;
 rec[i].VPChar:=p_value;
 end;
DataForm.ClientDataSet1.InsertRecord(rec);


Сам по себе он срабатывает но, по выходу из процедуры выпадаю в exception "Invalid Pointer Operation"
Помогите где ошибся?


 
Desdechado ©   (2004-08-22 19:17) [1]

что такое TVarRec?
и зачем вот это
 p_value:=StrAlloc(length(value));
 FillMemory(p_value,length(value)+1,0);
 MoveMemory(p_value,@value[1],length(value));
 rec[i].VType:=6;
 rec[i].VPChar:=p_value;


 
Erik1   (2004-08-23 10:46) [2]

С масивами надо работать разрешоными средствами, а не топором по принципу куда нибудь да попадем. Вобщем код полная ерунда, откуда такой взялся непонятно. Создай масив
Rec: Array of Variant;
begin
 j := 0;
 SetLength(Rec, FieldCount);
 for i := 0 to FieldCount-1 do
   if Fields[i].Value <> nil then
   begin
    Rec[j] := Fields[i].Value;
    inc(j);
   end;
 SetLength(Rec, j+1);

А вобщето все это можно сделать еще проще:
DataForm.ClientDataSet1.InsertRecord(DataForm.GoodsQuery.Fields);



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.056 c
9-1084886879
istemy
2004-05-18 17:27
2004.09.19
Сферические координаты в OpenGL


6-1089616621
ikivio
2004-07-12 11:17
2004.09.19
Socket Error в компонентах Indy


1-1094135805
Lord de Mon
2004-09-02 18:36
2004.09.19
Filter


14-1093893470
able
2004-08-30 23:17
2004.09.19
Протокол XML-RPC


1-1094392347
ZLG
2004-09-05 17:52
2004.09.19
Как сохранить состояние CheckBox, radiobutton, edit