Avatar billede megabyte_ Nybegynder
12. september 2000 - 11:06 Der er 3 kommentarer og
2 løsninger

Sql

Hey

Har lige 2 problem :)

with form1.Query1 do
  begin
  close;
  SQL.Clear;
  SQL.Add(\'Update Kunder\');
  SQL.Add(\'Set navn = :navn\');
  Params[0].AsString  := Form5.Edit1.Text;                  //Navn
  SQL.Add(\'Where kundenr = \'+#39+form1.rxdbgrid1.selectedfield.AsString+#39);
  ExecSQL;
  end;

Men der er også andre felter som skal opdateres. Adresse, postnummer osv hvordan får jeg dem opdateret på samme tid

Der er også et felt som heder kundenr som skal stige en hver gang jeg til føjer en ny men hvordanfår jeg den til det jeg har et id felt så jeg kan ikke bruge en autu numb ting til det :(
tror det skal være noget i stil med at den læser den sidste posts kundenr og lægger en til men hvordan ??

<MB>
Avatar billede delphi Nybegynder
12. september 2000 - 12:12 #1
1. problem:

Update SQL udtrykket kan skrives som:

update \"tablename\"
set \"columnname\" = \"newvalue\"[,\"nextcolumn\" = \"newvalue2\"...]
where \"columnname\" OPERATOR \"value\" [and|or \"column\" OPERATOR \"value\"];
[] = optional
OPERATOR = =, >, < etc.

Dvs. i dit eksempel:

Update Kunder
Set Navn = :Navn, Adresse = :Adresse, etc etc.
Where KundeNr = \"12345\"

2. problem:

Med SQL udtrykket:

Select MAX(KundeNr)
From Kunder

kan du finde det højeste benyttede kundenr.  Læg 1 til dette tal og brug resultatet som næste kundenr.
Der er dog et muligt problem her.  Antag at du har en Kunde med nr. 10 og dette nr. er det øjeblikkelige højeste nr.  Til denne kunde er der i andre tabeller, fx. ORDRE, tilknyttet nogle poster.  Hvis du nu sletter kunden i KUNDE tabellen, men ikke de relaterende poster i ORDRE tabellen (groft brud på den relationelle DB tankegang), så vil du når du opretter en ny kunde komme til at genbruge kunde nr. 10 og allerede på dette tidspunnkt vil denne nye kunde have tilhørende poster i ORDRE tabellen (altså dem fra den gamle kunde). 
Dette problem kan du dels løse ved at overholde referentiel integritet for din database og dels kan du sørge for at have en særlig tabel, hvori du som eneste post gemmer senest benyttede kundenr ved oprettelse af ny kunde.  Ved næste oprettelse af en kunde læser du dette nr., lægger en til tallet, gemmer resultat i tabellen.  Resultatet bruges også som det nye kunde nr. i KUNDE tabellen.

Håber at det gav mening....

Delphi
Avatar billede martinlind Nybegynder
12. september 2000 - 12:30 #2
Lige et tip til nummer-tabelen, det kan være en god ide at læse nummeret og skrive det næste nummer med det samme inden du går vidre med at oprette den ny rec. så undgår du at der er to der opretter en ny rec. med samme nye nummer

Eks.:
 
SQL.Text := \'Update NummerDB SET LastSUN = LastSUN + 1\';

ExecSQL;

SQL.Text := \'SELECT LastSUN-1 as NySUN FROM NummerDB\';

Open;

----------

Held og Lykke *S*

Avatar billede megabyte_ Nybegynder
12. september 2000 - 12:42 #3
kunne bruges jeres begge men delphi var bedst og først håber ikke at i bliver sur over denne måde jeg deler point på

<MB>
Avatar billede megabyte_ Nybegynder
12. september 2000 - 12:42 #4
btw takker for hjælpen :)

<MB>
Avatar billede delphi Nybegynder
12. september 2000 - 12:53 #5
Del du bare løs, du må for min skyld gerne give dem alle til MArtin.  Jeg er her ikke for at samle point, men jeg er dog begænset tidssmæssigt.

Delhi

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