Avatar billede bonzai Nybegynder
24. august 2004 - 14:39 Der er 13 kommentarer og
1 løsning

Opdatering af databasen efter sletning af poster.

Hejsa!

Mit spørgsmål lyder på, hvordan jeg kan opdatere mit program/database efter at have slettet en post. For posten bliver hængende på min form (hvorfra jeg slettede den) og der bliver den indtil jeg lukker hele programmet ned og starter det op igen.

På forhånd mange tak :o)
Avatar billede pjotre Novice
24. august 2004 - 15:10 #1
Der er flere måder:
Har du husket at "poste" ændringe: dbnavn.post;
Du kan lukke og og derefter åbne databasen.
Du kan refreshe din formular: frmnavn.refresh;
Pjotre
Avatar billede bonzai Nybegynder
24. august 2004 - 15:21 #2
Jeg bruger en TQuery komponent til opgaven.
Det virker ikke med refresh.
Hvordan ville du gøre det med at lukke og åbne databasen?
Kan man evt. bruge en TUpdateSQL komponent til at opdatere med?
Avatar billede koonz Nybegynder
24. august 2004 - 15:41 #3
Den klart nemme metode er

qry.close;
qry.Open;

Du skal være opmærksom på at det vil placere din "cursor" på første record efter open.
Så du skal fortage noget mere, hvis du vil flytte den hen til posten før eller efter den du slettede.
Avatar billede bonzai Nybegynder
24. august 2004 - 15:57 #4
Det virker heller ikke med open og close metoderne (ikke for mig i hvert fald)...
Så kommer denne fejl: 'Error creating cursor handle'
Avatar billede koonz Nybegynder
24. august 2004 - 18:52 #5
Hvordan sletter du din post ? - Via SQL eller ?
Avatar billede bonzai Nybegynder
25. august 2004 - 09:34 #6
Jeg sletter min post på følgende måde:

query.sql.clear;
query.sql.add('Delete from table1');
query.sql.add('Where id = :param1');
query.ParamByName('Param1').asInteger := table.FieldByName('id').asInteger;
query.ExecSQL;
Avatar billede pjotre Novice
25. august 2004 - 10:44 #7
Jeg mener du kun skal skrive følgende:
query.sql.clear;
query.sql.add('Delete from table1 where id = "' + param1 + '"');
query.ExecSQL;
Avatar billede bonzai Nybegynder
25. august 2004 - 11:06 #8
Den kan jeg altså ikke lige regne ud, hvorfor jeg skal skrive:
  query.sql.add('Delete from table1 where id = "' + param1 + '"');

Det fungerer jo udmærket med den kode jeg bruger (altså lige med undtagelse af, at formen/databasen ikke bliver opdateret med det samme).
Avatar billede stoney Nybegynder
25. august 2004 - 11:13 #9
Kør din select query igen eller dbgrid1.refresh hvis det er en sådan
din data bliver vist i.

Stoney
Avatar billede koonz Nybegynder
25. august 2004 - 12:11 #10
Den query du bruger som Delete, er det den samme som du bruger til select? - for så er du nød til at "putte" hele din SQL sætning i den igen, fordi du jo overskriver med din delete sql. - noget alla

QryTest.close;
Qrytest.sql.Add(SELECT * FROM Table1);
QryTest.open;

QryTest.sql.clear;
QryTest.sql.add('Delete from table1');
QryTest.sql.add('Where id = :param1');
QryTest.ParamByName('Param1').asInteger := table.FieldByName('id').asInteger;
QryTest.ExecSQL;

QryTest.close;
Qrytest.sql.Add(SELECT * FROM Table1);
QryTest.open;


Det nemmeste er egentlig at bruge forskellige Query's til at select'e og delete.
Avatar billede bonzai Nybegynder
25. august 2004 - 13:55 #11
Så fik jeg endelig løst problemet :o)

Det var åbenbart ikke min Query (eller database) jeg skulle lukke og åbne igen, men selve tabellen! Det virker i hvert fald.

Altså:

query.sql.clear;
query.sql.add('Delete from table1');
query.sql.add('Where id = :param1');
query.ParamByName('Param1').asInteger := table.FieldByName('id').asInteger;
query.ExecSQL;

with table1 do
begin
  close;
  open;
end;
Avatar billede vallemanden Nybegynder
25. august 2004 - 14:57 #12
istedet for
with table1 do
begin
  close;
  open;
end;

kan du bruge
table1.Refresh;
Avatar billede bonzai Nybegynder
26. august 2004 - 08:07 #13
Tak for det :o)
Avatar billede vallemanden Nybegynder
26. august 2004 - 08:11 #14
så kan du jo godt lukke spg, når duhar fået det løst ik'?
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