Avatar billede megabyte_ Nybegynder
11. september 2000 - 11:55 Der er 11 kommentarer og
1 løsning

SQL hjælpppp

Hey

Jeg sider og er ved at lave et lille projekt til skolen.
prblemet er at jeg skal addet noget til en pardox database via SQL det gør den oxo fint men jeg kan ikke åbne databasenigen menmindre jeg lukker programmet og strter det igen

her er den code der addet det til databasen

with form1.RxQuery1 do
begin
  close;
  SQL.Clear;
  SQL.Add(\'insert into kunder(navn, Kontaktperson, Adresse, postnummer, city, land, telefonnummer, fax, email)VALUES(:navn, :Kontaktperson, :Adresse, :postnummer, :city, :land, :telefonnummer, :fax, :email)\');
  Params[0].AsString  := Form2.Edit1.Text;                  //Navn
  Params[1].AsString  := Form2.Edit2.Text;                  //Kontaktperson
  Params[2].AsString  := Form2.Edit3.Text;                  //Adresse
  Params[3].Asinteger := strtoint(Form2.Edit4.Text);        //Postnummer
  Params[4].AsString  := Form2.Edit5.Text;                  //By
  Params[5].AsString  := Form2.Edit6.Text;                  //Land
  Params[6].AsInteger := strtoint(Form2.Edit7.Text);        //Telefonnummer
  Params[7].AsInteger := strtoint(Form2.Edit8.Text);        //Fax
  Params[8].AsString  := Form2.Edit9.Text;                  //Email
  ExecSQL;
end;
close;
form1.RxDBGrid1.Update;
end;

men hvordan får jeg den til at åbne databasen igen så man er fri for at lukke programmet ned og starte det igen før at man kan se de poster der er i databasen

<MB>
Avatar billede pellelil Nybegynder
11. september 2000 - 12:05 #1
Dir RdDBGrid1 \"peger\" på en database enten i form af en Table eller Query og det skulle være nok at \"refresh\'e\" denne.
Avatar billede martinlind Nybegynder
11. september 2000 - 12:12 #2
Refresh metoden virker ikke på en Query, da de fleste SQL servere ikke supporter dette ( et problem med SQL ), så løsningen er at skrive følgende kode :

form1.rxdbgrid1.datasource.dataset.close;
form1.rxdbgrid1.datasource.dataset.open;

Dette bevirker at du for genindlæst dit SQL statement og derved får de nyeste data, det kan desværre ikke løses på anden måde, når du bruger en QUERY, ellers skal du prøve med en TABLE i steddet.

*S*
Avatar billede martinlind Nybegynder
11. september 2000 - 12:13 #3
Refresh = update

*S*
Avatar billede delphi Nybegynder
11. september 2000 - 12:14 #4
Som pellelil siger: Table.Refresh eller Query.Refresh  (egentligt TDataset.refresh, men både query\'s og tables nedarver fra TDataset).

Min kommentar går egentligt mere på din kode.  Du har sat \"Close\" uden for din
\"With form1.RxQuery1 Do\"-blok, så derfor er resultatet at din form bliver lukket....men det er måske bare en stavebøf?

Delphi
Avatar billede megabyte_ Nybegynder
11. september 2000 - 12:35 #5
Delphi>
nej det skal lukke formen efter at man har instaste de data det skal gemmes :)
Avatar billede megabyte_ Nybegynder
11. september 2000 - 12:39 #6
martinlind>
det virker det sværge ikke nu får jeg nemlig en skulle fejl nå jeg vil åbne den databasen igen

\"projekt project1.exe raised exception class ENoResult Set whit message \'Error creating cursor handle\'. Process stopped. Use Set or run to continue\"
og det holder jo ikke

<MB>
Avatar billede delphi Nybegynder
11. september 2000 - 12:47 #7
Så skal du da ikke sætte din update kommando bagefter Close - det er ulogisk.
Avatar billede megabyte_ Nybegynder
11. september 2000 - 12:49 #8
okey nu er jeg væk :) hvad snakker du om
det skal nok lige siges at jeg lige er begyndt at rode med sql :)

<MB>
Avatar billede delphi Nybegynder
11. september 2000 - 13:11 #9
I ovenstående kode laver du et INSERT sql kald.  Efter ExecSQL afslutter du din \"With xx Do\"-blok (uden at have lavet error check på din insert kommando og uden at have lukke din SQL query - begge dele ville være smart). 
Dernæst kalder du din Form\'s Close kommando og afslutter så med at update en DBGrid på formen.

Dels er der ingen grund til at update griden, idet den aligevel ikke kan ses når formen lukker, dels er det ulogisk ikke at afslutte med Close kommandoen som det allersidste i metoden - i hvertfald i min lille bog...

Ang. dit egentlige problem:
Når du indsætter/ændre/sletter noget i en database tabel via et dataset, det være sig en tabel eller en query, så vil andre datasets der peger på den samme fysiske tabel ikke automatisk \"se\" denne ændring.  Det kan du meget nemt afprøve:  Lav på en form to sæt af: TTabel-Datasource-DBgrid der peger på samme tabel.  Når du åbner dine tabeller skulle du meget gerne se det samme i begge grids.  Laver du så en ændring i det ene grid vil denne ændring ikke være at se i det andet. 
Løsningen er, som Pellelil skrev, at du skal have opdateret dit dataset - dvs. de tabeller/queries som ikke foretog ændringen i din tabel.
En TTable opdateres ved at kalde dens Refresh metode.  Det kan man også gøre på en TQuery, men det kan (vist) afhænge af den underliggende database, men bør virke på Paradox og Access DB\'er (har dog ikke lige afprøvet det på stående fod).
Under alle omstendigheder vil det altid virke, hvis du lukker og gen-åbner en TQuery.  (Nu er det vel ikke sådan, at du bruger den samme Query til at vise tabel indholdet som i ovenstående kode, men har glemt at dens SQL udtryk nu er blevet ændret til en INSERT?)

Delphi
Avatar billede megabyte_ Nybegynder
11. september 2000 - 13:25 #10
Delphi> takker
jep jeg have brugt en samme til både at vise den me dog adde med
nu har jeg bare lige en sidste ting jeg håber du kan svare mig på hvordan opdatere jeg så at mit gid viser alle datas også de nye :)

<MB>
Avatar billede delphi Nybegynder
11. september 2000 - 13:30 #11
Et grid skal vel egentligt ikke opdateres?  Jeg må godt nok indrømme, at lige netop det punkt har jeg aldrig bokset med, men en grid viser vel bare hvad det aktuelle dataset viser - dermed bør det være nok at opdatere datasettet og så følger griddet bare med automatisk...?

Delphi
Avatar billede megabyte_ Nybegynder
11. september 2000 - 13:32 #12
Delphi>
well jeg har fundet en løsning men takker

<MB>
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