Announcement

Collapse
No announcement yet.

Feld einer Tabelle hinzufügen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Feld einer Tabelle hinzufügen

    Hallo,
    Ich versuche vergeblich, einer Paradox-Tabelle ein neues Feld zu definieren.<br>
    Die Hilfe-Beispiele sind da nicht sehr hilfreich ...<br>
    Hier folgend mein bisheriger Versuch: <br>

    procedure TDefineForm.DefineFeld;<br>
    var tab:TTable;<br>
    ty:TFieldType;feld,art:String;<br>
    memsize,f,i,sz:Integer;<br>
    hDb: hDBIDb;<br>
    TableDesc: CRTblDesc;<br>
    Props: CURProps;<br>
    pFields: pFLDDesc;<br>
    pOp: pCROpType;<br>
    B: Byte;<br>
    begin<br>
    feld:='';sz:=0;f:=0;<br>
    art:='';<br>
    try<br>
    tab:=TTable.Create(Application);<br>
    with tab do begin<br>
    Active := False;<br>
    DatabaseName :=AliasBox.Text;<br>
    TableName:=TabellenBox.Text;<br>
    TableType:=ttParadox;<br>
    if ((pos('.dbf',TabellenBox.text)>0) or<br>
    (pos('.DBF',TabellenBox.text)>0)) then tableType:=ttDBase;<br>
    if ((pos('.txt',TabellenBox.text)>0) or<br>
    (pos('.TXT',TabellenBox.text)>0)) then tableType:=ttASCII;<br>
    Exclusive:=True;<br>
    end;<br>
    tab.FieldDefs.Update;<br>
    with tab.FieldDefs do begin<br>
    for i:=0 to FelderListe.Items.Count-1 do begin<br>
    feld:=FelderListe.Items[i];<br>
    art:=TypListe.Items[i];<br>
    f:=StrToInt(SizeListe.Items[i]);<br>
    if art='A' then ty:=ftString;<br>
    if art='D' then ty:=ftDate;<br>
    if art='S' then ty:=ftSmallInt;<br>
    if art='I' then ty:=ftInteger;<br>
    if art='$' then ty:=ftCurrency;<br>
    if art='M' then ty:=ftMemo;<br>
    if art='D' then f:=0;<br>
    if art='S' then f:=0;<br>
    if art='I' then f:=0;<br>
    if art='$' then f:=0;<br>
    Add(feld,ty,f,False);<br>
    end; {for}<br>
    end; {with}<br>
    // tab.FieldDefs.Update; <br>

    pFields := nil;<br>
    pOp := nil;<br>
    (DbiGetCursorProps(hDBICur(tab), Props));<br>
    // Get enough memory for one field desc times the # of fields<br>
    MemSize := Props.iFields * SizeOf(FLDDesc);<br>
    pFields := AllocMem(MemSize);<br>
    // Fill the field descriptor with the existing field information...<br>
    (DbiGetFieldDescs(Tab.Handle, pFields));<br>
    // Blank out the structure...<br>
    FillChar(TableDesc, sizeof(TableDesc), #0);<br>
    // Get the database handle from the table's cursor handle...<br>
    (DbiGetObjFromObj(hDBIObj(Tab.Handle), objDATABASE,hDBIObj(hDb)));<br>
    // Put the table name in the table descriptor...<br>
    StrPCopy(TableDesc.szTblName, Tab.TableName);<br>
    // Put the table type in the table descriptor...<br>
    StrPCopy(TableDesc.szTblType, Props.szTableType);<br>
    // The following three lines are necessary when doing any field restructure<br>
    // operations on a table...<br>
    // Set the field count for the table<br>
    TableDesc.iFldCount := Tab.FieldCount;<br>
    // Link the operation descriptor to the table descriptor...<br>
    TableDesc.pecrFldOp := pOp;<br>
    // Link the field descriptor to the table descriptor...<br>
    TableDesc.pFldDesc := pFields;<br>

    Tab.Close;<br>
    // Call DbiDoRestructure...<br>
    (DbiDoRestructure(hDBIDB(Tab.Handle), 1, @TableDesc, nil, nil, nil, False));<br>
    <br>
    tab.Exclusive:=False;<br>
    tab.Active:=true;<br>
    finally<br>
    tab.Active:=False;<br>
    tab.free;<br>
    // FreeMem(pFields, MemSize);<br>
    if (pFields <> nil) then FreeMem(pFields);<br>
    if (pOp <> nil) then FreeMem(pOp);<br>
    end;<br>
    MessageDlg(Fertig,mtInformation,[mbok],0);<br>
    end;<br>

  • #2
    Hallo,<br>
    ich habe noch ein bisschen rumgestöbert und unter dem Forum "Delphi-Datenbanken"<br>
    den Hinweis auf http://www.borland.com/devsupport/bde/delphifiles.html gefunden. <br>
    Dort werde ich erst einmal nachsehen.<br>
    <br>
    Ausserdem waren die vermehrten Hinweise auf SQL-Funktionen recht signifikant ... :-))<br>
    Gruss<br>
    Helmut<br&gt

    Comment


    • #3
      Hallo,<br>
      ist dieses hier ein Forum für Selbstgespräche? <br>
      <br>
      ... o.k.: zu den Hinweisen auf die Borland-Support-Seiten: diese sind in dieser Frage <b>nicht</b> hilfreich!<br>
      Die Beispiele in dem Bereich "Delphi / Datenbanken" zu dieser Frage sind auch nicht direkt zu übernehmen.<br>
      Zweck soll wohl sein, dass man solange rumprobiert und Mini-Hinweise in der SQL-Hilfe findet, bis man selbst<br>
      rausgefunden hat, wie es geht?! - Wozu dann ein Forum?<br>
      <br>
      Also: es gab bei der Verwendung folgender Syntax:<br>
      ALTER TABLE "tabelle.db" ADD feldname typ<br>
      immer den Fehler "Merkmal nicht verfügbar"<br>
      Das ist eine Meldung, die bei ca. 10 Millionen SQL-Dingen auftritt.<br>
      <br>
      Folgende Syntax führt schliesslich auch bei einer Paradox-Tabelle zum Ziel:<br>
      ALTER TABLE "tabelle.db" ADD "tabelle.db"."feldname" typ<br>
      ==> Man achte auf den Punkt zwischen "tabelle.db" und "feldname" <== <br>
      <br>
      Es ist eigentlich recht unverständlich, warum "Experten" wie Andreas Kosch dieses selbst in den <br>
      Beiträgen in diesem Forum und auch in seinen eigenen Büchern nicht publizieren können oder wollen.<br>
      <br>
      Gruß<br>
      Helmut Böcke

      Comment


      • #4
        Hallo,

        zuerst einige Bemerkungen zu diesem Forum. Auch wenn viele hier regelmässig auf Fragen antworten, basiert das alles auf freiwilliger und unentgeltlicher Basis. Auch meine Provider-Gebühren zahle ich selbst.

        Der Sinn des FORUMS besteht darin, bereits fertige Lösungsansätze zur Verfügung zu stellen bzw. über Lösungsansätze zu reden. Dies bedeutet jedoch nicht, das ein Dritter verpflichtet ist, ein "seltenes" Problem selbst zu lösen und dann als Antwort innerhalb von 2 Tagen zu präsentieren.

        Was die Frage zum ALTER TABLE-Aufruf angeht, wird bereits in der BDE-Hilfedatei <b>LOCALSQL.HLP</b> das folgende Beispiel für ALTER TABLE mit einer Paradox-Tabelle aufgeführt:
        <pre>
        ALTER TABLE "customer.db"
        ADD "customer.db"."#ID" CHAR(3)
        </pre>
        Wenn jedes Buch alle Informationen aus der Borland-Dokumenation wiederholen soll, bleibt für eigene Erweiterungen kein Platz mehr übrig ;-)
        &#10

        Comment


        • #5
          Hallo Andreas Kosch,<br>
          <b>re Buch:</b> o.k. - die Beispiele zu SQL in dem o.a. Buch sind sicher nicht in der Delphi-Hilfe zu finden ... :-)) <br>
          <b>re: Beispiel zu ALTER TABLE mit Paradox-Tabelle:</b> meine Anmerkung dazu war bezogen auf die verschiedenen
          Diskussionen zu diesem Thema unter <b>BDE</b> und <b>Datenbanken</b>, in denen ich etwa drei oder vier Vorschläge - wohlgemerkt zu Paradox-Tabellen - auch von dir - gesehen habe, die diese "offensichtliche" (weil in der Hilfe irgendwo doch noch zu findende) Syntax <b>nicht</b> erwähnt haben.</br>
          <br>
          Gruß<br>
          Helmut Böcke

          Comment

          Working...
          X