Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehlermeldung nach erfolgreichem Connect zum Server (https://www.delphipraxis.net/69510-fehlermeldung-nach-erfolgreichem-connect-zum-server.html)

torud 16. Mai 2006 12:09

Datenbank: SQLServerExpress,SQLServer • Zugriff über: ADO

Fehlermeldung nach erfolgreichem Connect zum Server
 
Wenn ich mich mit meiner ADOConnection zu meinem SQLServerExpress verbinde, ist alles schön, versuche ich mich aber nun zu einem SQLServer2000 zu connecten, auf der genau die gleiche DB liegt, dann erhalte ich nach der Connection eine Fehlermeldung, die wie folgt lautet...

Was mache ich falsch???

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Tennis_Manager.exe ist eine Exception der Klasse EDatabaseError aufgetreten. Meldung: 'Die Datenmenge unterstützt keine Positionsmarken, die von Multi-Datensatz-Elementen benötigt werden.'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Hier mein Code der keinen Fehler aufwirft. Der Fehler kommt erst danach. Zwischen dem Create des Datamoduls und dem OnShow des Hauptfensters...
Delphi-Quellcode:
procedure TDM.DataModuleCreate(Sender: TObject);
var
  PCName, ServerName:String;
  ini:TIniFile;
begin
  PCName    := GetComputerName;
  Servername := form1.cmb_servername.text;
  ini:=TIniFile.Create(App_Path + 'settings.ini');
  if ini.ReadString('server','name','')<>'' then
    begin
      ServerName:=ini.ReadString('server','name','');
      form1.cmb_servername.Text:=ini.ReadString('server','name','');
    end;

  with ADOConnection1 do
    begin
      Connected:=false;
      ConnectionString:= 'Provider=SQLOLEDB.1;Password=matrox;'+
                         'Persist Security Info=True;User ID=sa;'+
                         'Initial Catalog=Tennis;'+
                         'Data Source='+Servername+';'+
                         'Use Procedure for Prepare=1;Auto Translate=True;'+
                         'Packet Size=4096;Workstation ID='+PCName+';'+
                         'Use Encryption for Data=False;Tag with column collation when possible=False';
      Connected:=true;
    end;
    if ADOConnection1.Connected then ShowMessage('Verbindung zu ' + ServerName + ' hergestellt!')
    else
      begin
        ShowMessage('Verbindung zu ' + ServerName + 'nicht hergestellt!');
        exit;
      end;
    //die db-controls erhalten ihr datafield
    //weather-controls
    Form1.ed_temp_min.DataField:='min_temp';
    Form1.ed_temp_max.DataField:='max_temp';
    Form1.ed_wind.DataField:='wind';
    Form1.ed_link_txt.DataField:='link_txt';
    Form1.mem_txt_today.DataField:='txt_today';
    Form1.mem_txt_prognose.DataField:='txt_prognose';
    //help-controls
    form1.ed_question.datafield:='question';
    form1.mem_answer.datafield:='answer';
    //player-controls
    form1.ed_pl_firstname.datafield:='first_name';
    form1.ed_pl_secondname.datafield:='second_name';
    form1.ed_ioc.datafield:='ioc';
    form1.ed_bdate.datafield:='birthdate';
    form1.ed_bplace.datafield:='birthplace';
    form1.ed_residence.datafield:='residence';
    form1.ed_height.datafield:='height';
    form1.ed_weight.datafield:='weight';
    form1.ed_plays.datafield:='plays';
    form1.ed_profi_since.datafield:='profi_since';
    //matches-controls
    form1.ed_m_id.datafield:='match_id';
    form1.ed_pln_a.datafield:='player_A';
    form1.ed_pln_b.datafield:='player_B';
    form1.ed_pla_pts.datafield:='pts_a';
    form1.ed_plb_pts.datafield:='pts_b';
    form1.ed_pla_serv.datafield:='serv_a';
    form1.ed_plb_serv.datafield:='serv_b';
    form1.ed_set1_a.datafield:='set_1a';
    form1.ed_set1_b.datafield:='set_1b';
    form1.ed_set2_a.datafield:='set_2a';
    form1.ed_set2_b.datafield:='set_2b';
    form1.ed_set3_a.datafield:='set_3a';
    form1.ed_set3_b.datafield:='set_3b';
    form1.ed_set4_a.datafield:='set_4a';
    form1.ed_set4_b.datafield:='set_4b';
    form1.ed_set5_a.datafield:='set_5a';
    form1.ed_set5_b.datafield:='set_5b';
    //match-edit-controls
    form1.ed_m_id_edt.datafield:='match_id';
    form1.ed_pln_a_edt.datafield:='player_A';
    form1.ed_pln_b_edt.datafield:='player_B';
    form1.ed_pla_pts_edt.datafield:='pts_a';
    form1.ed_plb_pts_edt.datafield:='pts_b';
    form1.ed_pla_serv_edt.datafield:='serv_a';
    form1.ed_plb_serv_edt.datafield:='serv_b';
    form1.ed_set1_a_edt.datafield:='set_1a';
    form1.ed_set1_b_edt.datafield:='set_1b';
    form1.ed_set2_a_edt.datafield:='set_2a';
    form1.ed_set2_b_edt.datafield:='set_2b';
    form1.ed_set3_a_edt.datafield:='set_3a';
    form1.ed_set3_b_edt.datafield:='set_3b';
    form1.ed_set4_a_edt.datafield:='set_4a';
    form1.ed_set4_b_edt.datafield:='set_4b';
    form1.ed_set5_a_edt.datafield:='set_5a';
    form1.ed_set5_b_edt.datafield:='set_5b';


    //die db-anbindungen werden aktiviert
    dt_weather.CommandText:='weather';
    dt_weather.Active:=true;
    dt_help.CommandText:='helpdesk';
    dt_help.Active:=true;
    dt_players.CommandText:='players';
    dt_players.Active:=true;
    dt_tournament.CommandText:='tournaments';
    dt_tournament.Active:=true;
    dt_matches.CommandText:='matches';
    dt_matches.Active:=true;
    dt_match_edit.CommandText:='matches';
    dt_match_edit.Active:=true;

    FormatGrids;
    ShowMessage('Anbindung fertig...');
end;

marabu 16. Mai 2006 14:00

Re: Fehlermeldung nach erfolgreichem Connect zum Server
 
Hallo Tom,

eventuell hast du bei der ADOConnection für CursorLocation einen unpassenden Wert (clClient) eingetragen. Oder du verwendest einen falschen CursorType bei deiner Query.

Grüße vom marabu

torud 16. Mai 2006 14:22

Re: Fehlermeldung nach erfolgreichem Connect zum Server
 
Hallo marabu,

Ich habe in einem anderen Thread gelesen, dass das nicht geht und wohl sogar bekannt ist, warum auch immer...

bei der ADOConnection steht die CursorLocation auf clUseServer und ich nutze nur die AdoDatasets (bisher) und habe dort den CursorType auf ctKeyset stehen. Was extrem komisch ist, ist, dass ich nun nachdem ich die gesamten DB-Komponenten abgehangen habe, es erstens zwar funktioniert, ich aber unterschiedliche Ergebnisse bei einer SQL-Abfrage erhalte.

Delphi-Quellcode:
dm.dt_matches.CommandText:='Select * from matches Where match_id = ' + MatchID;
liefert mir bei der Anfrage an einen MSSQLServerExpress das korrekte Ergebnis zurück und von einem MSSQLServer2000 erhalte ich als RecordCount immer eine -1 zurück, obwohl der Eintrag definitiv vorhanden ist.

Probleme über Probleme...:-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz