AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

_Recordset erstellen

Ein Thema von HendrikM · begonnen am 14. Nov 2012 · letzter Beitrag vom 14. Nov 2012
Antwort Antwort
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#1

_Recordset erstellen

  Alt 14. Nov 2012, 08:20
Ich bin gerade bei Umstieg von D 6/XP auf XE2/Win7.
unter den D6 Bedingungen hatte ich folgendes:
Delphi-Quellcode:
     FRSet:=CreateComObject(CLASS_RECORDSET) as _Recordset;
     FRSet.CursorLocation:=adUseClient;
     FRSet.Fields.Append('k',adInteger,4,adFldKeyColumn);
     FRSet.Fields.Append('POSX',adSingle,0,adFldUnspecified);
     FRSet.Fields.Append('POSY',adSingle,0,adFldUnspecified);
     FRSet.Open(EmptyParam,EmptyParam,adOpenUnspecified,adOpenUnspecified);
was immer funktioniert hat.
Unter XE2 beklagt sich der Compiler: "Nicht genügend Parameter" (beim 1. Append bereits).
OK: auf folgendes geändert:
Delphi-Quellcode:
     FRSet:=CreateComObject(CLASS_RECORDSET) as _Recordset;
     FRSet.CursorLocation:=adUseClient;
     FRSet.Fields.Append('k',adInteger,0,adFldKeyColumn,0);
     FRSet.Fields.Append('POSX',adSingle,0,adFldUnspecified,0);
     FRSet.Fields.Append('POSY',adSingle,0,adFldUnspecified,0);
     FRSet.Open(EmptyParam,EmptyParam,adOpenUnspecified,adOpenUnspecified,0);
Damit war der Compiler erstmal beruhigt.
Während der Laufzeit erhalte ich dann die Fehlermeldung:
"Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereichs oder sind miteinander unvereinbar"
Frage wie geht es richtig?

Geändert von HendrikM (14. Nov 2012 um 09:44 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: _Recordset erstellen

  Alt 14. Nov 2012, 08:39
In welcher Zeile?

Bitte verwende die DELPHI-Tags, um deinen Code zu formatieren: Den Code markieren und dann auf das Delphi/Sparta-Symbol oben klicken.
  Mit Zitat antworten Zitat
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#3

AW: _Recordset erstellen

  Alt 14. Nov 2012, 08:59
FRSet.Fields.Append('k',adInteger,0,adFldKeyColumn ,0);
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: _Recordset erstellen

  Alt 14. Nov 2012, 09:36
Bearbeite bitte die Tags auch noch im 1. Beitrag.
Danke.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: _Recordset erstellen

  Alt 14. Nov 2012, 10:12
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Zitat:
The FieldValue parameter is only valid when adding a Field object to a Record object, not to a Recordset object. With a Record object, you can append fields and provide values at the same time. With a Recordset object, you must create fields while the Recordset is closed, and then open the Recordset and assign values to the fields.
Ich vermute daher du musst NULL oder ähnliches übergeben.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: _Recordset erstellen

  Alt 14. Nov 2012, 10:19
Wobei ich aber nicht erkennen kann, warum dort 5 Parameter hin sollen.

Zitat:
Delphi-Quellcode:
// *********************************************************************//
// Interface: Fields
// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID: {0000054D-0000-0010-8000-00AA006D2EA4}
// *********************************************************************//
  Fields = interface(Fields15)
    ['{0000054D-0000-0010-8000-00AA006D2EA4}']
    procedure Append(const Name: WideString; Type_: DataTypeEnum; DefinedSize: Integer;
                     Attrib: FieldAttributeEnum); safecall;
    procedure Delete(Index: OleVariant); safecall;
  end;
In XE ist es noch so deklariert.

Oder sieht das bei dir anders aus?


Welche Version dieser API nutzt du denn?
(Ich hoffe doch die Richtige/Passende )

Unit ADODB2000, ADODBXP, ADODB2010, Data.Win.ADODB oder Winapi.ADOInt?

Delphi-Quellcode:
// *********************************************************************//
// Interface: Fields
// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID: {00001564-0000-0010-8000-00AA006D2EA4}
// *********************************************************************//
  Fields = interface(Fields20)
    ['{00001564-0000-0010-8000-00AA006D2EA4}']
    procedure Append(const Name: WideString; Type_: DataTypeEnum; DefinedSize: Integer;
                     Attrib: FieldAttributeEnum; FieldValue: OleVariant); safecall;
    procedure Update; safecall;
    procedure Resync(ResyncValues: ResyncEnum); safecall;
    procedure CancelUpdate; safecall;
  end;
In Allem nach XP gibt es den 5. Parameter, dann könnte das mit dem NULL oder einem EMPTY eventuell passen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Nov 2012 um 10:33 Uhr)
  Mit Zitat antworten Zitat
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#7

AW: _Recordset erstellen

  Alt 14. Nov 2012, 10:29
Vielleicht hatte ich die ersten 2 Zeilen vergessen zu erwähnen:
Delphi-Quellcode:
     FRSet:=CreateComObject(CLASS_RECORDSET) as _Recordset;
     FRSet.CursorLocation:=adUseClient;
     FRSet.Fields.Append('k',adInteger,0,adFldKeyColumn,0);
     FRSet.Fields.Append('POSX',adSingle,0,adFldUnspecified,0);
     FRSet.Fields.Append('POSY',adSingle,0,adFldUnspecified,0);
     FRSet.Open(EmptyParam,EmptyParam,adOpenUnspecified,adOpenUnspecified,0);
und dann sieht das so aus in der Winapi.ADOInt:
Delphi-Quellcode:
  Fields = interface(Fields20)
    ['{00000564-0000-0010-8000-00AA006D2EA4}']
    procedure Append(const Name: WideString; Type_: DataTypeEnum; DefinedSize: ADO_LONGPTR;
                     Attrib: FieldAttributeEnum; FieldValue: OleVariant); safecall;
    procedure Update; safecall;
    procedure Resync(ResyncValues: ResyncEnum); safecall;
    procedure CancelUpdate; safecall;
  end;
  Mit Zitat antworten Zitat
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#8

AW: _Recordset erstellen

  Alt 14. Nov 2012, 12:21
Hallo zusammen,
EmptyParam ist richtig!
Danke für die Unterstützung
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz