Announcement

Collapse
No announcement yet.

locate

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

  • locate

    Datenbanksystem: Advantage Datavase Server 6.2:<br>
    MyTable.Locate('StrValue', 'test', [])) ; OK<br>
    MyTable.Locate('IntValue', 114, [])) ; OK<br>
    aber bei Double<br>
    MyTable.Locate('DoubleValue', 0.4, [])) kommt es zu einem Error 3118<br>
    bei:<br>
    MyTable.Locate('DoubleValue', '0.4', [])) kommt es nicht zu einem Error, aber 0,4 wird nicht gefunden, obwohl vorhanden.<br>
    <br>
    Wo ist der Bug:<br>
    a.) In mir.<br>
    b.) In Delphi.<br>
    c.) In den Routinen vom ADS.<br>
    <br>
    Dietmar

  • #2
    Mal ein Schuss ins Grüne:<br>
    <i>MyTable.Locate('DoubleValue', '0,4', []))</i><br>
    Keine Ahnung ob es geht, aber einen Versuch ist es wert...<p>
    Schöne Grüße, Mario Noack<p>
    PS: Insgeheim ist es beruhigend, dass auch ADS nicht problemlos ist..
    Schöne Grüße, Mario

    Comment


    • #3
      Dies liegt an Delphi und der Umwandlung von Variant nach Double. Es wird der Decimalseparator ',' verwendet und nicht '.', was eigentlich für den Filter erwartet wird. Folgendes löst das Problem:<BR><BR>
      <PRE>
      procedure TForm1.Button3Click(Sender: TObject);
      var
      ch: char;
      begin
      ch := DecimalSeparator;
      DecimalSeparator := '.';
      AdsTable1.Locate('Doublefield', 0.4, []);
      DecimalSeparator := ch;
      end;
      </PRE><BR>
      oder gleich in die Sourcen der Ads-Komponenten, Unit adsdata.pas:<BR>
      <PRE>
      function TAdsDataSet.Locate( const KeyFields: string; const KeyValues: Variant;
      Options: TLocateOptions ): Boolean;
      var //einfügen
      ch: char; //einfügen
      begin
      {$IFDEF CALLTRACE }
      WriteCallTrace( 'TAdsDataSet.Locate' );
      {$ENDIF }
      DoBeforeScroll;

      ch := DecimalSeparator; //einfügen
      DecimalSeparator := '.'; //einfügen

      Result := LocateRecord( KeyFields, KeyValues, Options );

      DecimalSeparator := ch; //einfügen

      { if the value was found resync the controls }
      if ( Result ) then
      begin
      Resync( [rmExact, rmCenter] );
      DoAfterScroll;
      end;
      end;

      </PRE&gt

      Comment


      • #4
        <b>&gt; PS: Insgeheim ist es beruhigend, dass auch ADS nicht problemlos ist... </b>
        <BR>
        ... aber dafür wird es schnell gefixt;

        Comment


        • #5
          @ADS Support: Das mit dem schnellen Fix hört und sieht man gern
          Schöne Grüße, Mario

          Comment

          Working...
          X