Announcement

Collapse
No announcement yet.

ADO - BetterADODataset ParamyName funktioniert einmal und einmal nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO - BetterADODataset ParamyName funktioniert einmal und einmal nicht

    Hallo,

    Ich hab zwei Planungstafeln die fast ident sind. In beiden benutze ich genau dieselben Komponenten (zumindest bis jetzt, soll sich aber ändern da die 2. nur eine Überischt darstellen soll)
    <PRE>
    procedure TFrmplanung.SetPlannung;
    var AEntry:TBitBtn;
    x:integer;
    begin
    x:=0;
    ResetPlannung;
    Application.HintPause := 100;
    Application.HintHidePause := 5000;
    QPlannung.Close;
    qPlannung.ParamByName['datum'].value := jvDateTimePicker1.date;
    Qplannung.Open;
    Baustliste.Close;
    Baustliste.open;
    while not QPlannung.Eof do begin
    AEntry := TBitBtn.Create(Self);
    AEntry.parent := PaintPanel1;
    AEntry.Left := 100;
    AEntry.Top := 30+x;
    AEntry.Caption := QPlannung.FieldBYName('Bezeichnung1').asstring;
    AEntry.Hint := QPlannung.FieldByName('Bezeichnung').asstring;
    AEntry.Tag := QPlannung.FieldByName('PosId').asinteger;
    AEntry.OnMouseMove := EntryMouseMove;
    AEntry.OnKeyDown := EntryBtnClick;
    Planliste.Add(AEntry);
    qPlannung.next;
    inc(x,40);
    end;
    end;
    </PRE>

    <PRE>
    CommandText:
    SELECT Baustelle.Bezeichnung, Baustellpos.*
    from Baustellpos,Baustelle
    where :datum between Baustellpos.von and Baustellpos.bis
    and Baustelle.Baustid=Baustellpos.Baustid
    </PRE>

    In der einen Tafel führt das Query zu einem Ergebnis in der anderen zu keinem. Wenn ich debugge komme ich bei der anderen nach der Zuweisung des Datumwertes auf value des Parameters bei der anderen immer auf einen EDataBaseError wenn ich versuche den Wert von Value auszulesen. Beide greifen auf dieselbe ADOConnection zu und die Parameterdefinition ist auch ident: <BR>
    Attributes: panullable=true<BR>
    DataType: ftDateTime<BR>
    Direction: pdInput<br>
    Numericscale: 3<br>
    Precision: 23<br>
    Size: 16<br>
    Value: 02.06.2003<br>
    Type: Date<br>

    Da die zweite Komponente eine Kopie ist kann ich mir das nicht erklären.

    Hat wer eine Idee woran es liegen kann.<BR>
    ADO Version = 2.7<BR>
    BetterADS Version = 3.04<BR>
    Delphi 5.0 Enterprise<BR>
    Betriebssystem Win 2000<BR>
    Datenbank MS SQL 7.0<BR

    LG<BR>
    Peter

  • #2
    Hallo,

    wie sieht die exakte Text-Darstellung der Konfiguration im Objektinspektor für TADOConnection und die TBetterADODataSet-Komponenten (rechter Mausklick | Anzeige als Text) aus

    Comment


    • #3
      Hallo,

      <PRE>
      object DBBaustelle: TADOConnection
      ConnectionString =
      'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
      'fo=False;Initial Catalog=PASBaustelle;Data Source=sql-server;Use' +
      ' Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Wo' +
      'rkstation ID=PC6;Use Encryption for Data=False;Tag with column c' +
      'ollation when possible=False'
      CursorLocation = clUseServer
      IsolationLevel = ilReadCommitted
      LoginPrompt = False
      Mode = cmReadWrite
      Provider = 'SQLOLEDB.1'
      Left = 104
      Top = 32
      end

      QPlannung in funktionierender Form

      object QPlannung: TBetterADODataSet
      Connection = mdlstandard.DBBaustelle
      CommandText =
      'SELECT Baustelle.Bezeichnung, Baustellpos.*'#13#10'from Baustellpos,Ba' +
      'ustelle'#13#10'where '#9':datum between Baustellpos.von and Baustellpos.b' +
      'is'#13#10'and'#9'Baustelle.Baustid=Baustellpos.Ba ustid'#13#10
      Parameters = <
      item
      Name = 'datum'
      Attributes = [paNullable]
      DataType = ftDateTime
      NumericScale = 3
      Precision = 23
      Size = 16
      Value = 37774d
      end>
      Left = 728
      Top = 37
      end

      QPlannung in nicht funktionierender Form:

      object qPlannung: TBetterADODataSet
      Connection = mdlstandard.DBBaustelle
      CommandText =
      'SELECT Baustelle.Bezeichnung, Baustellpos.*'#13#10'from Baustellpos,Ba' +
      'ustelle'#13#10'where '#9':datum between Baustellpos.von and Baustellpos.b' +
      'is'#13#10'and'#9'Baustelle.Baustid=Baustellpos.Ba ustid'#13#10
      Parameters = <
      item
      Name = 'datum'
      Attributes = [paNullable]
      DataType = ftDateTime
      NumericScale = 3
      Precision = 23
      Size = 16
      Value = 37774d
      end>
      Left = 608
      Top = 69
      end

      </PRE>

      LG
      Pete

      Comment


      • #4
        Hallo,

        &gt;..CursorLocation = clUseServer

        in diesem Fall wird die Leitung (Datenbankverbindung) von der ersten aktiven Abfrage blockiert. Der Eintrag clUseServer ist primär für ACCESS-Datenbanken gedacht (genauer gesagt für Datenbanken, die von der JET Engine bedient werden). Im Fall einer SQL-Datenbank ist <b>clUseClient</b> die erste Wahl, da in diesem Fall die Datenbankverbindung sofort nach dem vollständigen Kopieren der Ergebnismenge der SELECT-Abfrage in die lokale <i>OLE DB Client Cursor Engine</i> wieder frei ist und für die nächste SQL-Anweisung zur Verfügung steht.

        P.S: TBetterADODataSet hat im Laufe der Zeit seine Default-Einstellung für die Eigenschaft CursorLocation geändert. Die alte Version 3.04 habe ich nicht mehr auf Lager, um dort nachsehen zu können

        Comment


        • #5
          Ja daran lags leider nicht.

          Ich erzeuge ja auch alle Formulare immer dynamisch und das erste Formlar wurde noch gar nicht aufgemacht.

          Bleibt immer noch das Problem das zei idente Abfragen einmal einen Parameter richtig initialisieren und einmal nicht.

          LG
          Pete

          Comment


          • #6
            Es bringt mich aber gleichzeitig auf ein Problem das ich schon des längerem versuche zu lösen.

            Ich hab eine alte Applikation die etwas aufwendig ist umzustellen auf reine ADO Verbindung.

            Es gibt also eine gemischte Umgebung aus reinen ADO Verbindungen und ODBC Verbindungen zu einem MS SQL 7.0 Server.

            Und genau diesen Effekt scheine ich dabei zu haben obwohl dort die Connections (bei ADO) alle auf UseCLient stehen.

            Gibt es das gleiche Problem mit den ODBC Connections?

            Es greifen nämlich 2 verschiedene Applikationen auf die gleiche Datenbank zu. Meine und SAGE KHK und nun ist es so das wenn meine Applikation läuft bestimmte Tabellen in der SAGE Applikation auf einen "LOCK" stossen und irgendwann mal auf ein TimeOut. Sobald ich meine Applikation schließe ist das Problem weg. Hab aber bisher nur die Tabellen gefunden die da involviert sind aber nicht den Grund.

            Tippe aber ganz stark auf die alten ODBC Verbindungen.

            Haben Sie dazu acuh eine Idee?

            mfg
            Pete

            Comment


            • #7
              Jetzt bin ich aber paff.

              Weil ich hab gerade nachgesehen meine PAS Datei zu BetterADO zeigt Version 4.02. Die Versionsangabe im Programm zeigt 3.04.

              muß mal schauen was da falsch läuft

              Pete

              Comment


              • #8
                So,

                repariert und alle Komponenten neu erzeugt.
                Leider ist das Ergebnis immer noch das gleiche.

                Das über meinem Haupte schwebende Fragezeichen wird immer größer.

                Pete

                Comment


                • #9
                  Hab noch vergessen zu erwähnen wenn ich den Parameter nicht setze sondern das Dataset einfach öffne (wobei er ja dann auf den Wert aus dem Objektinspektor zurückgreift) funktioniert das ganze.

                  LG
                  Pete

                  Comment


                  • #10
                    Hallo,

                    Problem gelöst.

                    Offensichtlich nimmt die DateTimepicker Komponente die Uhrzeit mit aus dem Objektinspektor auch wenn man auf das Property 'Date' benutzt. Und wenn man dann Programme schreibt kurz vor Mitternacht kann natürlich nichts rauskommen wenn die Dateneingabe immer Tagsüber passiert.

                    Danke für Bemühungen.

                    LG
                    Pete

                    Comment

                    Working...
                    X