Announcement

Collapse
No announcement yet.

Parameter im nativen Command-Objekt

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

  • Parameter im nativen Command-Objekt

    In einer UPDATE-Abfrage über ein natives Command-Okjekt möchte ich ein Datenfeld vom Type datetime in einer Tabelle auf dem SQL Server aktualisieren. Ich benutze modifizierten Code aus Herrn Koschs Buch Ado und Delphi

    <PRE>
    procedure TForm1.UpdateWithParams1;
    var aCon: _Connection;
    aCommand: _Command;
    vRows: OLEVariant;
    begin
    aCon := coConnection.Create;
    aCon.CursorLocation := adUseClient;
    aCon.Open(CstrConn4,'','',adConnectUnspecified);
    try
    aCommand := CoCommand.Create;
    try
    with aCommand do begin
    CommandType := adcmdText;
    CommandText := 'UPDATE Personen SET Zeit = ? WHERE Nachname = ?';
    Parameters.Append
    (CreateParameter('Zeit',adNumeric,adParamInput,8,
    EmptyParam));
    Parameters.Append
    (CreateParameter('Nachname',adVarChar,adParamInput ,
    40,EmptyParam));
    Set_ActiveConnection(aCon);
    Parameters[0].Value := '18.02.1940';
    Parameters[1].Value := 'Grigull';
    Execute(vRows,EmptyParam,adExecuteNoRecords);
    end; // with aCommand
    finally
    aCommand := nil;
    end; // try finally
    finally
    aCon.Close;
    aCon := nil;
    end; // try finally
    end; // UpdateWithParams
    </PRE>

    Ich kann machen was ich will. Ich erhalte immer die Fehlermeldung "Die Genauigkeitsangabe ist ungültig". Gleiches passiert bei Feldern vom Typ NUMERIC oder MONEY. String und Integer funktionieren.

    Was mache ich falsch?
    Für Hinweise bin ich dankbar.

    Mit freundlichem Gruss

    Hans Grigull

  • #2
    Da hab' ich lider gepennt. Im ersten Paramter muss der Datentyp natürlich adDate heißen dann gehts.

    Sorry

    Comment


    • #3
      Noch'n Nachbrenner.

      Beim Code
      <PRE>
      Parameters.Append (CreateParameter('Wert',adNumeric,adParamInput,8,
      EmptyParam));
      Parameters.Append (CreateParameter('Nachname',adVarChar,adParamInput ,
      40,EmptyParam));
      Set_ActiveConnection(aCon);
      Parameters[0].Value := '1113,45';
      </PRE>
      erhalte ich wiederum die o.a. Fehlermeldung.
      Ersetze ich adNumeric durch adCurrency funktioniert es merkwürdigerweise.

      Die Spalte ist in CREATE TABLE als Wert numeric(10,2) definiert.

      Ich wäre für einen Rat dankbar, wie man denn nun Werte an einen ADO-Parameter für ein NUMERIC- bzw. DECIMAL-Spalte übergibt.

      Mit Dank und freundlichem Gruss

      Hans Grigul

      Comment


      • #4
        Hallo,

        &gt;...wie man denn nun Werte an einen ADO-Parameter für ein NUMERIC- <br>
        &gt; bzw. DECIMAL-Spalte übergibt.

        in der Hilfedatei des MDAC SDK (Bestandteil des Microsoft Platform SDK und somit Bestandteil der MSDN Library) steht auf der Hilfeseite <i>CreateParameter Method</i> der folgende Satz: "<i>If you specify a numeric data type (adNumeric or adDecimal) in the Type argument, then you <b>must also set</b> the <b>NumericScale</b> and <b>Precision</b> properties.</i>".

        Nur beim Datentyp <b>adCurrency</b> stehen die Regeln bezüglich der Nachkommastellen bereits fest, bei einem adNumeric muss man die von der Datenbank vorgegebene Precision auch bei den Parametern verwenden (vor der Übergabe des Parameter-Wertes werden für den adNumeric-Parameter noch die Eigenschaften <b>Precision</b> und <b>NumericScale</b> zugewiesen)

        Comment


        • #5
          Danke, Herr Kosch für den Hinweis. Jetzt klappt es.

          Ich habe bisher mit Interbase 6.0 und den IBX-Komponenten gearbeitet. Wegen der Schwierigkeiten mit Interbase 6.0 unter XP möchte ich auf die MSDE umstellen. In ADO ist abr doch vieles anders. Da ist es vor allem als "Einzelkämpfer" schön zu wissen, wo man einen Rat bekommen kann, wenn man zu Anfang manchmal nicht weiss, wo in den umfangreichen Informationen man suchen soll.

          Also nochmals herzlichen Dank und alles Gute für Sie

          Ihr Hans Grigul

          Comment

          Working...
          X