20. august 2007 - 22:53Der er
14 kommentarer og 1 løsning
Indsætte et ekstra field i en Paradox tabel i runtime
Jeg har søgt på kryds og tværs i de eksisterende spørgsmål, men jag har ikke kunnet finde et der giver svar på mit spørgsmål. Jeg håber der er en derude som kender svaret.
Hvis man har et program ude at køre forskellige steder, og man får brug for et ekstra felt i sin tabel, for at kunne tilfredsstille kundernes ønsker, hvordan indsætter man så dette ekstra felt.
Du kan bruge SQL: ALTER TABLE "employee.dbf" ADD BUILDING_NO SMALLINT -----------------------
Her er mere tekst fra hjælpen: Local SQL supports the following subset of the ANSI-standard ALTER TABLE statement. You can add new columns to an existing table using this ALTER TABLE syntax:
... og skip brugen af TTable-nedarvinger. De er meget tunge at åbne da de flytter al data, struktur og sekundære indekser over, mens en TQuery-nearving kun henter det man har brug for.
En mellemvej der ligner TTable men er TQuery er at sætte RequestLive = true;
En endnu bedre løsning er at bruge TClientDataSet som helt ligner TTable, men arbejder med SQL-queries i baggrunden. Endelig bliver opdateringer af datasættet ikke skrevet til databasen før man laver en ApplyUpdates.
Hvor kommer Query1 fra? Jeg forsøgte at lægge en TADOQuery på min form og kalde den 'Query1'. Så ville den godt compilere, men da jeg startede programmet fik jeg en Application error. 'Exception EOleSysError in module Radio.exe at 000710F9. Colnitialize er ikke blevet kaldt.'.
Jeg tror vi snakker to forskellige sprog. Jeg har aldrig snakket om at jeg bruger ADO komponenter. Jeg har aldrig brugt SQL før. Du kom med en SQL sætning som kunne tilføje et felt til en tabel. Jeg spurgte om syntaksen, som du så kom med. Jeg undrede mig over hvor 'Query1' kommer fra. Det eneste jeg kunne finde som mindede lidt om en Query var ovennævnte TADOQuery. Lige nu ved jeg mindre en da jeg stillede spørgsmålet.
Bruger du TADOQuery skal den forbindes til database-tabellerne vha. en ConnectionString (der er en ...-knap i "Object Inspectoren" der kan hjælpe dig med det). Men det er det forkerte sted at lave forbindelsen. Det bliver lettere at forbinde vha. TADOConnection som du forbinder din TADOQuery til.
TADOConnectionen skal naturligvis åbnes før du kan bruge TADOQuery.
Jeg bruger BDE Normalt tilgår jeg mine tabeller sådan her: Tabel1.DataSet.Open; Tabel1.DataSet.First; Str1 := Tabel1.DataSet.FieldByName('Slags').AsString; Tabel1.DataSet.Close;
Det jeg har brug for et et ekstra felt, så jeg kan skrive: Vaerdi := Tabel1.DataSet.FieldByName('Nummer').AsInteger;
Derfor skal der tilføjes et ekstra felt til tabellen. Da programmet kører flere steder, skal der laves en opdatering som kan tilføje dette felt i runtime, og konvertere nogle data som skal gemmes deri. Derefter skal der laves en opdatering som udnytter disse ekstra data.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.