Newsgroup: it.comp.lang.delphi
Titolo: Aiuto, come creo una tabella dBase

Ciao, riesco quasi a fare tutto pure gli indici MDX ma non riesco a inserire
i decimali quando il campo é Numerico, il
Cerco di spiegarmi meglio: Vorrei creare delle tabelle ttDBase a runtime e
visto la semplicità del componente Ttable vorrei utilizzare questo, ma
quando apro il field editor (TFieldDefs) aggiungo un nuovo campo, gli do il
nome, la precisione, in Size metto la dimensione, a questo punto se in
DataType ho specificato che deve essere numerico e voglio aggiungere dei
decimali, dove cavolo glielo dico?, grazie a tutti coloro che mi rispondono.
Uso Delphi 5 Interprise .
Ciao a tutto il NG.

> dove cavolo glielo dico?
usa una TQuery.
Allego un po' di codice 
Ciao
Duilio
procedure TForm1.Button1Click(Sender: TObject);
var
   a:boolean;
   l:TStringList;
begin
   l:=TStringList.Create;
   try
      l.Add('NUMERO,N,12,2');
      l.Add('STRINGA,C,10');
      a:=DBFCreate('pippo.dbf',l);
   finally
      l.Free;
   end;
end;
function DBFCreate(FileName:string;l:TStringList):boolean;
var
   i:integer;
   s:string;
   FldNam, FldTyp, FldLen, FldDec:string;
begin
   result:=False;
   if l.Count=0 then
      exit;
   if FileExists(FileName) then
      sysutils.DeleteFile(FileName);
   with TQuery.Create(nil) do
   try
      Sql.Add('Create Table "'+FileName+'" (');
      for i:=0 to l.Count-1 do
      begin
         s:=l.Strings[i];
         FldNam:=StrTok(s,',','error');
         FldTyp:=StrTok('',',','error');
         FldLen:=StrTok('',',','error');
         FldDec:=StrTok('',',','error');
         s:=FldNam+' ';
         if FldTyp='C' then
            s:=s+
               'Char('
               +
               FldLen
               +
               '),'
         else if FldTyp='N' then
            s:=s+
               'Numeric('
               +
               FldLen
               +
               ','
               +
               FldDec
               +
               '),'
         else if FldTyp='D' then
            s:=s
               +
               'Date'
               +
               ','
         else if FldTyp='L' then
            s:=s
               +
               'Boolean'
               +
               ','
         else if FldTyp='M' then
            s:=s
               +
               'Blob(0,1)'
               +
               ',';
         {alla fine, togli la ',' e metti ')'}
         if i=l.Count-1 then
            s:=Copy(s,1,length(s)-1)+')';
         SQL.Add(s);
      end;
      try
         ExecSQL;
      except
         exit;
      end;
      result:=True;
   finally
      Free;
   end;
end;
function StrTok(Text,Token,Error:string):string;
const
   LftTxt:string='';
var
   i:integer;
   s:string;
begin
   result:=Error;
   if length(Text)>0 then
   begin
      s:=Text;
      LftTxt:=s;
   end
   else if length(LftTxt)>0 then
      s:=LftTxt
   else
      exit;
   i:=Pos(Token,s);
   if i=0 then
   begin
      result:=LftTxt;
      LftTxt:='';
   end
   else
   begin
      result:=Copy(s,1,i-1);
      LftTxt:=Copy(s,i+length(Token),length(s)+1-i-length(Token));
   end;
end;

 ha scritto nel messaggio
news:3befb8c7...@news.libero.it...


 ha scritto nel messaggio
news:3befb8c7...@news.libero.it...


Alberto,
qui il codice funziona perfettamente e i record vengono inseriti come
devono.
Il problema che hai e' quindi altrove.
In bocca al lupo
Duilio

 ha scritto nel messaggio
news:3bf19674...@news.libero.it...
