Avatar billede jisch Mester
13. april 2004 - 00:08 Der er 4 kommentarer og
1 løsning

SQL og Currency

Hej,
I min Delphi 5 har jeg skrevet denne programstump for at oprette en table:

with TQuery.Create(Application) do
  try
    DatabaseName := 'Test';
    SQL.Clear;
    SQL.Add('CREATE TABLE "MyTable.db"');
    SQL.Add('(');
    SQL.Add('  MyNo AUTOINC, ');
    SQL.Add('  Dato DATE, ');
    SQL.Add('  Name CHAR(30), ');
    SQL.Add('  Amount FLOAT, ');
    SQL.Add('  Prov BOOLEAN, ');
    SQL.Add(')');
    ExecSQL;
  finally
    Free;
  end;
end;

Ok. Men jeg skal have lavet datafield 'Amount' om til currency. Hvordan gør jeg det?

Hilsen Jisch.
Avatar billede jisch Mester
13. april 2004 - 00:12 #1
Supplement til spørgsmål: Tabellen er oprettet med anselig mængde data. Det er altså et spørgsmål om at ændre feltet i tabellen.
Jisch.
Avatar billede hrc Mester
13. april 2004 - 18:12 #2
Du skal have ændret et felt. Nu er det holdt i SQL og jeg har selv gjort det på følgende tunge måde (Desværre kan ALTER TABLE ikke bruges til ret meget):

1. Opret en kopi af ovenstående tabel (create table "Kopi.Db" like "MyTable.DB") - da du kører med separate filer kan du måske bare omdøbe.

2. Opret ny tabel med korrekte felter.

3. Importér data, noget med "insert into "MyTable.DB" (MyNo, Dato, Name, Armount, Prov) like (select MyNo, Dato, Name, Armount from "Kopi.Db"); Er ikke helt sikker på syntaksen, men den er tæt på.
Avatar billede jisch Mester
13. april 2004 - 19:35 #3
>>hrc Tak for svar. Hvad hedder koden for typen currency i SQL? I Database Desktop angives $ (money).
Avatar billede hrc Mester
13. april 2004 - 20:51 #4
Arrh. Den var værre. Måske kan du bruge typen "MONEY", men jeg tror ikke at alle SQL-databaser har den - ret mig endelig hvis jeg tager fejl.

Den korrekte linie ser vistnok sådan her ud:

  insert into "MyTable.DB" (MyNo, Dato, Name, Armount, Prov)
    select MyNo, Dato, Name, Armount from "Kopi.Db";

i Access skal du sikkert sætte [] overalt, noget lignende:

  insert into [MyTable] ([MyNo], [Dato], [Name], [Armount], [Prov])
    select [MyNo], [Dato], [Name], [Armount] from [Kopi];

- måske overdriver jeg, men jeg er irriteret over at hjælpen ikke har kunne fortælle mig hvornår der skal klammer på felter og tabelnavne, og altid skal prøve mig frem.


Hvis ikke det virker, overvej dette:

En helt anden løsning - noget lettere, egentlig pænere hvis man kun adderer og subtraherer - er at regne med "ører" i stedet for "kroner". Så kan du bruge heltal til at gemme værdierne. Eksempelvis gemmes beløbet 3,14 som 314.

Fordelen er at heltal ikke er platformafhængige. Databaseplatforme kan have forskellige måder at gemme decimaltal på - nogle har 10 betydende cifre, andre 18 og det kan blive et problem at konvertere mellem disse. Desuden fylder heltal noget mindre.

Ulempen er, at du sikkert skal dividere/gange med 100 mange steder i dit program (men det afhænger af hvordan dit program er skruet sammen). Desuden gemmes kun to betydende decimaler.
Avatar billede jisch Mester
13. juni 2004 - 23:39 #5
Spørgsmålet er tilbagetrukket - intet brugbart svar - desværre!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester