Avatar billede cope21 Nybegynder
22. januar 2000 - 09:01 Der er 5 kommentarer og
1 løsning

Læs/rediger i database

Jeg har 2 spørgsmål:

1. En ComboBox (ComboBoxRedigerKunde) skal fyldes med Items fundet i Table1.

Jeg har prøvet med:

begin
  I := 0;
  Table1.First;
  Repeat
    ComboBoxRedigerKunde.Items.Add(Table1.Kunde.Value);
    Inc(I);
    Table1.FindNext;
  Until (I = Table1.RecordCount);


MHT. ComboBoxRedigerKunde.Items.Add(Table1.Kunde.Value); - Kunde er den kolonne i Table1, hvor alle de mange kunder står dernedaf.

Hvordan gør jeg?


2.

Når jeg skal adde nogle felter i Table1, er det noget med Table1.Append; ... Men hvordan er resten af koden?


Undskyld jeg er så krævende, men er jo nødt til at finde svar for at lære det. Hehe! :-)
Avatar billede koonz Nybegynder
22. januar 2000 - 11:06 #1
Jeg går udfra at din table "stammer" fra en database, hvorfor bruger du ikke sql, det giver dig mange flere muligheder.

Avatar billede sjensen Nybegynder
22. januar 2000 - 13:45 #2
Sådan kan du løse 1:

begin
  I := 0;
  Table1.First;
  Repeat
    ComboBoxRedigerKunde.Items.Add(Table1.fieldbyname('Kunde').Value);
    Inc(I);
    Table1.FindNext;
  Until (I = Table1.RecordCount);
end;

Hvis ellers feltet hedder kunde. Der er mange andre muligheder, men med et table er dette det der giver den største frihed.

2.
Du skal enten Append eller insert. I begge tilfælde fylder du så felterne ud efter kaldet, og du bør nok teste på om der findes en record med samme nøgle først, hvis du bruger index:

if not table1.findkey([edit1.text]) then
begin
  table1.insert;
  table1.fieldbyname('Kunde').value := exit1.text;
  table1.fieldbyname('næstefelt').value := edit2.text;
  o.s.v. indtil alle felter er udfyldt og så:
  table1.post;
end;

På denne måde checker du først om recorden allerede eksisterer og hvis ikke bliver den oprettet.

sjensen

Avatar billede sjensen Nybegynder
22. januar 2000 - 13:56 #3
Og æhm...

Hvad med lige at afslutte dine tidligere spm. du har fået hjælp til:

http://www.eksperten.dk/spm.asp?id=9922
http://www.eksperten.dk/spm.asp?id=9472


Det ville lune lidt med points, og det er jo bl.a. det vi hjælper for.

sjensen
Avatar billede cope21 Nybegynder
24. januar 2000 - 02:05 #4
Hehe... klart... ren forglemmelse :o) Sorry!

Avatar billede cope21 Nybegynder
24. januar 2000 - 03:25 #5
Et lille tillægsspørgsmål, nu jeg jo altid er så flink med at give mange points.. hehe :O))

1. Hvordan checker jeg om EditOpretPostnr.Text er et tal eller bare tekst? Den er selvfølgelig en String, men er der noget lignende:

If (IsNum(EditOpretPostnr.Text)) Then ????

Eller hvad kan man gøre... programmet crasher jo hvis jeg skriver alm. tekst og det skal være tal?
Avatar billede sjensen Nybegynder
24. januar 2000 - 09:39 #6
Ja, du har ret. Det vil gå ned med en fejl, hvis du prøver at overføre en test til et Db.integer felt.

Men i delphi er der nogle hjælpemidler:

table1.fieldbyname('kunde').asstring := edit2.text

Selvom 'kunde' er en integer (eller en double) kan du overføre dit tal som en tekst. Ved at bruge .asstring udfører Delphi selv konverteringen, hvorimod hvis du bruger .value forventer den at du overfører et tal.

Problemet med denne mulighed er at tallet bliver 0 hvis EditOpretPostnr.Text ikke indeholder et korrekt tal. F.eks. hvis der er et mellemrum foran eller et bogstav i.

Med isnum (hvis der eksisterer sådan en funktion) kan du jo checke om det er et tal inden du overfører det til registret.

Jeg ve dikke om isnum findes men her er en hurtig tilsvarende funktion der gør det samme:

function ertal(s : string) : boolean;
var i : integer;
begin
  try
    i := strtoint(trim(s));
    result := true;
  except
  on exception do result := false;
  end;
end;

Så hvis ikke isnum findes kan du bruge ertal istedet:

if ertal(EditOpretPostnr.Text) then
  table1.fieldbyname('Kunde').asstring := trim(EditOpretPostnr.Text);

Og hvis ikke editopretpostnr.text er et tal så skal du vel afbryde oprettelsen !
 
sjensen
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