On 2-8-2011 7:39, Reinier Olislagers wrote: > I've got trouble finding out how to fill and retrieve data for a > ftVarBytes field in a TBufDataset. > > .AsString doesn't seem to work well - if I fill it with the string > How do I fill this field? > I get back > How > > I tried SetData, which takes a buffer as data, so I tried filling a > PChar with the string data. Retrieving it leads to a big dump of memory, > so I wonder how you define the end of the buffer in the SetData call. > > Hope somebody can point me to some documentation or tell me the proper > way to do this. I've looked at Delphi docs, but that dealt mostly with > general BLOB fields, don't know if that includes varBytes. > > Below some test code and output: > program varbytesproject; > > {$mode objfpc}{$H+} > {$APPTYPE CONSOLE} > > uses > {$IFDEF UNIX}{$IFDEF UseCThreads} > cthreads, > {$ENDIF}{$ENDIF} > Classes, SysUtils, > { you can add units after this } > DB, BufDataSet; > > var > TestDataset: TBufDataset; > FieldDef: TFieldDef; > TestString: String; > TempPChar: PChar; > begin > TestDataset := TBufDataset.Create(nil); > FieldDef := TestDataset.FieldDefs.AddFieldDef; > FieldDef.Name := 'ftVarBytes'; > FieldDef.DataType := ftVarBytes; > FieldDef.Size := 2; > TestDataset.CreateDataSet; > TestDataset.Open; > TestDataset.Append; > > writeln('1. How do I fill an ftVarBytes field?'); > Teststring:='How do I fill this field?'; > writeln('2. Like this?'); > TestDataset.FieldByName('ftVarBytes').Asstring := Teststring; > writeln('ftVarbytes.AsString: ' + > TestDataset.FieldByName('ftVarBytes').AsString); > > writeln('3. Or like this?'); > TempPChar:=PChar(TestString); > TestDataSet.FieldByName('ftVarBytes').SetData(TempPChar); > writeln('ftVarbytes.AsString: ' + > TestDataset.FieldByName('ftVarBytes').AsString); > TestDataset.Post; > > writeln('4. Get data using this:'); > writeln('ftVarbytes.AsString: ' + > TestDataset.FieldByName('ftVarBytes').AsString); > writeln('5. Or get data using this:'); > TempPchar:=''; > if TestDataset.FieldByName('ftVarBytes').GetData(TempPChar) then > begin > writeln('We filled TempPChar with: ' + TempPChar); > end > else > begin > writeln('The Getdata function didn''t work.'); > end; > TestDataset.Close; > TestDataset.Free; > end. > > Output: > 1. How do I fill an ftVarBytes field? > 2. Like this? > ftVarbytes field contains: How > 3. Or like this? > ftVarbytes field contains: How > 4. Get data using this: > ftVarbytes field contains: How > 5. Or get data using this: > We filled TempPChar with: > > !The Getdata function didn't work. > > > > > > TObject♦ > <snip more data from memory>
Does anybody have a suggestion on how to use ftVarbytes fields or aren't they supported in FPC? _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal