Avatar billede morten_s Nybegynder
26. maj 2001 - 23:31 Der er 12 kommentarer og
1 løsning

Error creating cursor handle ?

  CurrentID := QueryAlarm.FieldByName(\'AlarmNr\').AsString;
    Label9.Caption := CurrentID;
    QueryAlarm.SQL.Text := \'UPDATE AlDB SET AlKvit = \'\'MS\'\'\';

    QueryAlarm.Close;
    QueryAlarm.Open;

Når jeg afvikler ovenstående SQL får jeg fejlmedelelsen Error creating cursor handle på linien QueryAlarm.Open

Nogen som har en god ide til hvad som går galt ?
Avatar billede nico26 Nybegynder
26. maj 2001 - 23:42 #1
måske fordi du skal kalde close før du ændrer i sql
Avatar billede morten_s Nybegynder
26. maj 2001 - 23:47 #2
Desværre ikke har lige prøvet følgende
QueryAlarm.DisableControls;
    QueryAlarm.Close;
    QueryAlarm.SQL.Text := \'UPDATE AlDB SET AlKvit = \'\'MS\'\'\'+
                          \'WHERE AlarmNr = \'+ CurrentID;
    QueryAlarm.Open;
    QueryAlarm.EnableControls;
    QueryAlarm.Refresh;
    DBGridAlarm.Refresh;

Men med samme resultat -> får jeg fejlmedelelsen Error creating cursor handle på linien QueryAlarm.Open
Avatar billede martinlind Nybegynder
27. maj 2001 - 00:19 #3
Fordi du ikke laser en SELECT så får du ikke en CursorHandle tilbage, så du skal skrive :

QueryAlarm.ExecSQL i stedet for Open, Open bruge KUN med SELECT eller tilsvarende der også retunere en CursorHandle

/Martin
Avatar billede martinlind Nybegynder
27. maj 2001 - 00:21 #4
laser = laver
Avatar billede morten_s Nybegynder
27. maj 2001 - 00:43 #5
Ja men hvordan får jeg så open (Åbnet igen ??)

Avatar billede martinlind Nybegynder
27. maj 2001 - 00:48 #6
Du bruger evt. en anden Query til dit UpdateStatement, eller du husker det gamle, laver din update og sætter det gamle igen og Open

/Martin
Avatar billede morten_s Nybegynder
27. maj 2001 - 00:50 #7
Prøver lidt forskelligt

    CurrentID := QueryAlarm.FieldByName(\'AlarmNr\').AsString;
    Label9.Caption := CurrentID;
    QueryAlarm.DisableControls;
    QueryAlarm.Close;
    QueryAlarm.SQL.Text := \'UPDATE AlDB SET   
                            AlTekst = \'\'MS\'\'\';
    QueryAlarm.Prepared := True;
    QueryAlarm.ExecSQL;
    SetFilterAlarm;
    QueryAlarm.Open;
    QueryAlarm.EnableControls;
    QueryAlarm.Locate(\'AlarmNr\', CurrentID, []);

SetFilterAlarm indeholder en ORDRE BY, hvorefter jeg igen kan bruge en open, men der kommer ikke til at stå MS i feltet AlKvit, det forbliver tomt ??
Avatar billede morten_s Nybegynder
27. maj 2001 - 00:52 #8
Hvordan husker jeg det gamle query ??
Avatar billede martinlind Nybegynder
27. maj 2001 - 01:00 #9
VAR
  aOldSQL : String;

procedure UpdateAlarmQuery;
begin
  QueryAlarm.Close;
  aOldSQL := QueryAlarm.SQL.Text;
  QueryAlarm.SQL.Text := \'UPDATE AlDB SET   
                            AlTekst = \'\'MS\'\'\';
  QueryAlarm.ExecSQL;
  QueryAlarm.SQL.Text := aOldSQL;
  QueryAlarm.Open;
end;


din kode :


    QueryAlarm.DisableControls;
    QueryAlarm.Close;
    //QueryAlarm.SQL.Text := \'UPDATE AlDB SET   
    //                        AlTekst = \'\'MS\'\'\';
    //QueryAlarm.Prepared := True;
    //QueryAlarm.ExecSQL;
    UpdateAlarmQuery;
    SetFilterAlarm;
    QueryAlarm.Open;
    QueryAlarm.EnableControls;




Det er muligt du skal Commit\'e dine updates, hvilken SQL server bruger du ?

/Martin
Avatar billede morten_s Nybegynder
27. maj 2001 - 11:13 #10
Jeg bruger indtil videre en standard Paradox tabel, nu har jeg følgende kode:

    CurrentID := QueryAlarm.FieldByName(\'AlarmNr\').AsString;
    Label9.Caption := CurrentID;
    QueryAlarm.DisableControls;
    QueryAlarm.Close;
    OldSQLStr := QueryAlarm.SQL.Text;
    QueryAlarm.SQL.Text := \'UPDATE AlDB SET AlKvit = \'\'MS\'\'\';
    QueryAlarm.Prepared := True;
    QueryAlarm.ExecSQL;
    QueryAlarm.SQL.Text := OldSQLStr;
    QueryAlarm.Open;
    QueryAlarm.EnableControls;
    QueryAlarm.Locate(\'AlarmNr\', CurrentID, []);
    DBGridAlarm.Refresh;

Koden kører uden fejl fra BDE-Engine men feltet bliver aldrig opdateret ??
Avatar billede martinlind Nybegynder
27. maj 2001 - 11:39 #11
Hej Morten, send lige koden, så kigger jeg på det

/Martin
Avatar billede martinlind Nybegynder
27. maj 2001 - 13:46 #12
cc email :

Det burde du få ved at \"slippe dit select\", altså close den query du bruger til det, og så vente med at åbne til du har updatet, har du checket affectedrows efter din update, den retunerer sikkert 0, paradox låser ved select med \"order by\" og nogle andre. du kan evt. skifte til interbase, det er en rigtig SQL server og er lidt bedre til at styre låsning, du kan muligvis også lave et \"view\" i stedet for select jeg har ikke lige prøvet at bruge sådan et på paradox, men det kan man ihvert fald på IB view låser vist ikke dine data, da det indikerer at du kun kigger og derfor er \"ligeglad\" med updates.

/Martin
Avatar billede morten_s Nybegynder
27. maj 2001 - 15:20 #13
Kan TUpdateSQL komponenten bruges til at låse op og i givet fald hvordan ?
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