11. september 2000 - 11:55Der 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
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
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 :
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.
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?
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
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> 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 :)
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...?
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.