Announcement

Collapse
No announcement yet.

ADO-Parametertypen und SQL7-Feldtypen

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

  • ADO-Parametertypen und SQL7-Feldtypen

    Ich greife von MS-Access 2000 via ADO auf eine MSDE-DB zu. Der geplante INSERT betrifft 25 Felder und ist in einer stored-procedure hinterlegt. Diese rufe ich wie folgt auf:

    Dim cmd As New ADODB.Command

    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "stpInsertKunden"
    cmd.ActiveConnection = CurrentProject.Connection


    cmd.Parameters.Append cmd.CreateParameter("strName1", adBSTR, adParamInput)

    cmd.Parameters("strName1").Value = strName1


    cmd.Execute

    Beim Aufruf löse ich damit einen Konvertierungsfehler aus („Ungültiger Zeichenwert für Konvertierungsangabe“).

    Nun meine Fragen:
    1. Wo kann ich eine komplette Liste aller ADO-Feldtypen (z. B. adBSTR,...) einsehen und deren Verträglichkeit mit den SQL-Server-Typen?

    2. Wie lässt sich eine umfangreiche Parameterübergabe am sinnvollsten testen, um solche Konvertierungprobleme einzugrenzen und zu beheben?

  • #2
    Hallo,

    normalerweise würde ich in Delphi ein TADOStoredProc verwenden, um die Parameter-Konfiguration im Objektinspektor nachzuschlagen. Wenn diese "Kopiervorlage" jedoch nicht zur Verfügung steht, würde ich auf die folgende Stored Procedure zurückgreifen:
    <pre>
    CREATE PROCEDURE prStoredProcedureParameters
    @chvProcedureName varchar(30)
    AS

    SELECT
    0 AS ColIndex,
    'RETURN_VALUE' AS Name,
    3 AS Type,
    0 AS Size,
    0 AS NumericScale,
    10 AS Prec,
    4 AS Direction

    UNION

    SELECT
    sc.colid AS ColIndex,
    sc.name AS Name,
    CASE sc.usertype
    WHEN 16 THEN 11 --adBoolean, bit
    WHEN 21 THEN 6 --adCurrency, smallmoney
    WHEN 11 THEN 6 --adCurrency, money
    WHEN 22 THEN 133 --adDBDate, smalldatetime
    WHEN 12 THEN 133 --adDBDate, datetime
    WHEN 24 THEN 14 --adDecimal, decimal
    WHEN 10 THEN 14 --adDecimal, numeric
    WHEN 7 THEN 3 --adInteger, int
    WHEN 23 THEN 4 --adSingle, real
    WHEN 8 THEN 4 --adSingle, float
    WHEN 6 THEN 2 --adSmallInt, smallint
    WHEN 5 THEN 17 --adUnsignedTinyInt, tinyint
    WHEN 3 THEN 204 --adVarBinary, binary
    WHEN 4 THEN 204 --adVarBinary, varbinary
    WHEN 80 THEN 204 --adVarBinary, timestamp
    WHEN 20 THEN 204 --adVarBinary, image
    WHEN 1 THEN 200 --adVarChar, char
    WHEN 2 THEN 200 --adVarChar, varchar
    WHEN 19 THEN 200 --adVarChar, text
    END AS Type,
    sc.length AS Length,
    sc.scale AS NumericScale,
    sc.prec AS Prec,
    CASE sc.status & 64
    WHEN 64 THEN 3 --adParamOuput
    ELSE 1 --adParamInputOutput
    END AS Direction
    FROM syscolumns sc
    INNER JOIN sysobjects so ON sc.id = so.id
    WHERE so.name = @chvProcedureName

    ORDER BY ColIndex
    </pre>
    Mit dem Aufruf <i>EXECUTE prStoredProcedureParameters 'do_transfer'</i> erhalte ich die von ADO erwarteten Parametertypen mit der Längenangabe als Ergebnis zurück. Die Stored Procedure stammt aus einem Microsoft-Beispiel und liefert den Datentyp als Zahl zurück, die in einer ASP ohne explizites Einbinden der Konstantendeklaration verwendet werden kann. Der ADO-Typ steht im Kommentar neben jeder Zahl

    Comment

    Working...
    X