AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wechsel zwischen Datenbanken nicht möglich?

Wechsel zwischen Datenbanken nicht möglich?

Ein Thema von slemke76 · begonnen am 15. Okt 2010 · letzter Beitrag vom 18. Okt 2010
Antwort Antwort
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
136 Beiträge
 
#1

Wechsel zwischen Datenbanken nicht möglich?

  Alt 15. Okt 2010, 19:37
Datenbank: Sybase • Version: 9.0 • Zugriff über: ADO
Hallo zusammen,

ich habe ein etwas merkwürdiges Problem:

erstmal den Code:

Code:
const constConnStr='Provider=ASAProv.90;Eng=.......';

function TLXComm.getUmsatz(start: TDate; Ende: TDate):boolean;
var ConnStr: string;
    ADOConnection: TADOConnection;
    ADOQuery: TADOQuery;
begin
  ConnStr:=Format(constConnStr, [ FPassword,
                                  getDatabasePath()+'\'+FMandant+'\Database.db'
                                    ] );
  ADOConnection:=TADOConnection.Create(nil);
  ADOQuery:=TADOQuery.Create(nil);
  ADOConnection.ConnectionString:=ConnStr;
  ADOConnection.KeepConnection:=true;
  ADOConnection.LoginPrompt := False;
  AdoQuery.Connection:=ADOConnection;
  AdoQuery.CursorLocation:=clUseServer;
  AdoQuery.CursorType:=ctStatic;
  AdoQuery.ExecuteOptions := [];
  try
    AdoConnection.Open;
  except
    exit;
  end;

  AdoQuery.SQL.Clear;
  AdoQuery.SQL.Add('SELECT * FROM sample');
  AdoQuery.Open;

  ShowMessage(AdoQuery.FieldByName('id').Asstring);

  AdoQuery.Close;
  AdoQuery.Connection:=nil;
  AdoQuery.Free;
  AdoConnection.Connected:=false;
  AdoConnection.Close;
  AdoConnection.Free;
end;
Die Datenbank.db gibt es mehrfach, eine je Mandant. Wenn ich die Abfrage starte, klappt erstmal alles wunderbar.

Wenn ich allerdings die Abfrage nochmal *für einen anderen Mandanten* starte, wechselt er NICHT korrekt auf die andere Mandantendatenbank - ich bekomme das Ergebniss aus der ersten Abfrage.

Das ist mir etwas unverständlich; die gesamten ADO-Komponenten sind doch sauber ge-free-ed und die Connection zuvor geschlossen.

Oder habe ich etwas übersehen ?

lg
Sebastian
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
178 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Wechsel zwischen Datenbanken nicht möglich?

  Alt 15. Okt 2010, 23:07
Schuss ins Blaue. Du hast an anderer Stelle ein Problem. Möglicherweise steht in FMandant nicht das was du erwartest hast. Auch möglich wäre, dass du in den beiden verschiedenen Mandanten die gleichen Daten hast. Alles reine Vermutung.

Dein Code selbst hat aber auch ein paar Problem (die meiner Meinung nach aber nichts mit dem Problem zu tun haben). Im Falle einer Exception produzierst du ein Speicherleck. Und EXCEPT EXIT; END; ist für mich eigentlich immer böse.

Ich habe mir erlaubt den Code etwas umzustellen (ohne es aber durch den Compiler zu jagen). Den EXCEPT Abschnitt betrachte ich dabei aber immer noch als Notlösung, aber ich weiß ja nicht was du eigentlich vor hast.

Delphi-Quellcode:
const constConnStr='Provider=ASAProv.90;Eng=.......';

function TLXComm.getUmsatz(start: TDate; Ende: TDate):boolean;
var ConnStr: string;
    ADOConnection: TADOConnection;
    ADOQuery: TADOQuery;
begin
  ConnStr:=Format(constConnStr, [ FPassword, getDatabasePath()+'\'+FMandant+'\Database.db']);
  
  ADOConnection:=TADOConnection.Create(nil);
  try
    ADOConnection.ConnectionString:=ConnStr;
    ADOConnection.KeepConnection:=true;
    ADOConnection.LoginPrompt := False;

    ADOQuery:=TADOQuery.Create(nil);
    try
      AdoQuery.Connection:=ADOConnection;
      AdoQuery.CursorLocation:=clUseServer;
      AdoQuery.CursorType:=ctStatic;
      AdoQuery.ExecuteOptions := [];
      
      try
        AdoConnection.Open;
      except
        on e: Exception do begin
           ShowMessage(Format(
             'ID kann nicht ermittelt werden.'#10'%s: %s',
             [e.ClassName, e.message]
             );
          exit;
        end;
      end;

      AdoQuery.SQL.Clear;
      AdoQuery.SQL.Add('SELECT * FROM sample');
      AdoQuery.Open;

      ShowMessage(AdoQuery.FieldByName('id').Asstring);
    finally
      AdoQuery.Free;
    end;
  finally
    AdoConnection.Free;
  end;
end;
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
136 Beiträge
 
#3

AW: Wechsel zwischen Datenbanken nicht möglich?

  Alt 18. Okt 2010, 10:14
Guten Morgen,

die beiden Möglichkeiten bzgl. FMandant bzw. der gleichen Daten in der Datenbank habe ich beide gecheckt; daran liegt´s nicht.

Interessanterweise komme ich jeweils auf die richtige Datenbank, wenn ich das Programm zwischendurch beende ?!

Ich habe ähnliche Probleme auch mit einem Programm eines Dritt-Herstellers (das aber offensichtlich auch in Delphi geschrieben ist).

Ich vermute da eher mal eine Sybase-Spezialität (reine Vermutung)....

Vielen Dank für die Verbesserung des Codes !
Irgnedwie weiss ich auch nicht, was mich da geritten hat (Ist zum Glück ja noch frühes Entwicklungsstadium *g*).

Update:
Habe es (eher durch Zufall) rausbekommen, indem ich die AdoConnection.Connectionstring überwacht habe; in den Connectionstring muss
Cache Authentication=False;
mit rein, dann gehts.

lg
Sebastian

Geändert von slemke76 (18. Okt 2010 um 10:30 Uhr) Grund: Update !
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf