| 
| Autor | Beitrag |  
| Peter18 
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Mo 17.03.14 19:05 
 
Ein freundliches Hallo an alle,
 ich verwende Delphi 4  für meine Programmierung. Ein gefundenes "ADODataSet" macht Schwierigkeiten. Ich vermute es handelt sich um irreführende Meldungen. Führe ich das Programm normal aus, so erscheinen die Spalten ID und Postleitzahl, die Integer-Werte enthalten. Die Text-Spalten werden nicht angezeigt.
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 
 | procedure TADODataSet.InternalInitFieldDefs;var
 RowsAffected : OleVariant;
 nFields, I : Integer;
 begin
 if not Assigned(ADORecordset) then
 begin
 ADORecordSet := CoRecordSet.Create;
 ADORecordSet.CursorLocation := adUseClient;
 ADORecordSet.Open(fRecordSetSQL, ADOConnection, adOpenStatic, adLockOptimistic,-1)
 end;
 InternalFirst;      FieldDefs.Clear;
 
 begin
 nFields := ADORecordSet.Fields.Count;
 for I := 0 to nFields-1 do
 begin
 If ADORecordSet.Fields[I].Type_ in [adVarChar, adVarBinary, adChar] then
 FieldDefs.Add(ADORecordSet.Fields[I].Name,
 ADOFieldType(ADORecordSet.Fields[I].Type_),
 ADORecordSet.Fields[I].DefinedSize, False)
 else
 FieldDefs.Add(ADORecordSet.Fields[I].Name,
 ADOFieldType(ADORecordSet.Fields[I].Type_),
 0, False);
 end;
 end;
 end;
 |  in allen Fällen wird "FieldDefs.Add " im Else-Teil aufgerufen. Ersetze ich die 0 durch eine andere Zahl folgt die Fehlermeldung: "Ungültige Feldgröße ". Mit "ActualSize" ercheint "BOF oder EOF ist True ". Ich habe den Eindruck das die eigentliche Ursache wieder an anderer Stelle liegt. Ich hoffe jemand hat einen heißen Tipp!
 Grüße von der Nordsee und Dank im Voraus
 Peter |  |  |  
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Di 18.03.14 08:11 
 
Ich denke, Dein eigener Code sowie die Tabellendefinition wären zielführender als der VCL-Code (von urheberrechtlichen Bedenken einmal ganz abgesehen). |  |  |  
| zuma 
          Beiträge: 660
 Erhaltene Danke: 21
 
 Win XP, Win7, Win 8
 D7 Enterprise, Delphi XE, Interbase (5 - XE)
 
 | 
Verfasst: Di 18.03.14 08:58 
 
Hast du denn mal geprüft, welcher Typ jeweils im AdoDataSet ist ?
Also, Haltepunkt auf die If-Zeile und dann mal gucken, was in
 ADORecordSet.Fields[I].Type_ für ein Typ je Durchlauf angegeben wird ?
 
 Klingt für mich so, als ob es ein anderer Datentyp als die abgefragten [adVarChar, adVarBinary, adChar] ist.
 _________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
 Warum sich Sorgen ums Leben machen? Keiner überlebts!
 |  |  |  
| Peter18  
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Di 18.03.14 11:28 
 
Hallo WasWeißDennIch,
 danke für Deine Antwort. Urheberrechtliche Bedenken sind nicht notwendig. Zum einen geht es mir um den Einstieg (Testprogram) und zum anderen ist die Quelle ausdrücklich freigegeben.
 Hallo zuma,
 auch Dir meinen Dank. Das habe ich getan und den Wert 202 gefunden. Da ich ihn nicht finden konnte (war etwas spät) habe ich die Zahl dort eingetragen wo "ftString" zugewiesen wird.
 Inzwischen bin ich wieder fit und habe die 202 als "adVarWChar" identifiziert. Zuweisen von "ftWideString" führt aber auch zu einer Fehlermeldung: "Type für Feld 'Vorname'ist unbekannt".
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 
 | function TADODataSet.ADOFieldType(ID: DataTypeEnum) :TFieldType;begin
 case ID of
 adInteger:
 ADOFieldType := ftInteger;
 adVarChar, adChar:
 ADOFieldType := ftString;
 adVarWChar:
 ADOFieldType := ftWideString;       adLongVarChar:
 ADOFieldType := ftMemo;
 adDBTimeStamp:
 ADOFieldType := ftDateTime;
 adDouble, adSingle, adNumeric:
 ADOFieldType := ftFloat;
 adLongVarBinary:
 ADOFieldType := ftBlob;
 adCurrency:
 ADOFieldType := ftCurrency;
 adSmallInt, adTinyInt:
 ADOFieldType := ftSmallInt;
 adVarBinary:
 ADOFieldType := ftVarBytes;
 else
 ADOFieldType := ftUnknown;   end;
 end;
 |  Die Zeilen
 		                       Delphi-Quelltext 
 									| 1:2:
 
 |     adVarWChar:ADOFieldType := ftWideString;
 |  habe ich eingefügt. Anscheinend ist das der falsche Typ. Der Fehler tritt in der Zeile
if DefaultFields then CreateFields; auf. Vielleicht ist ein anderer Typ richtig, doch welcher? Werde experimentieren vielleicht hilft das oder ein Tipp von Euch.
 Grüße von der Nordsee und Dank im Voraus
 Peter |  |  |  
| baumina 
          Beiträge: 305
 Erhaltene Danke: 61
 
 Win 7
 Delphi 10.2 Tokyo Enterprise
 
 | 
Verfasst: Di 18.03.14 11:38 
 
Ich würde ja sagen, dass adVarWChar hier fehlt:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 
 | procedure TADODataSet.InternalInitFieldDefs;var
 RowsAffected : OleVariant;
 nFields, I : Integer;
 begin
 if not Assigned(ADORecordset) then
 begin
 ADORecordSet := CoRecordSet.Create;
 ADORecordSet.CursorLocation := adUseClient;
 ADORecordSet.Open(fRecordSetSQL, ADOConnection, adOpenStatic, adLockOptimistic,-1)
 end;
 InternalFirst;      FieldDefs.Clear;
 
 begin
 nFields := ADORecordSet.Fields.Count;
 for I := 0 to nFields-1 do
 begin
 If ADORecordSet.Fields[I].Type_ in [adVarChar, adVarWChar, adVarBinary, adChar] then         FieldDefs.Add(ADORecordSet.Fields[I].Name,
 ADOFieldType(ADORecordSet.Fields[I].Type_),
 ADORecordSet.Fields[I].DefinedSize, False)
 else
 FieldDefs.Add(ADORecordSet.Fields[I].Name,
 ADOFieldType(ADORecordSet.Fields[I].Type_),
 0, False);
 end;
 end;
 end;
 |  |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 18.03.14 11:40 
 
	  |  Peter18 hat folgendes geschrieben  : |  	  | Urheberrechtliche Bedenken sind nicht notwendig. Zum einen geht es mir um den Einstieg (Testprogram) und zum anderen ist die Quelle ausdrücklich freigegeben. | 
 Die Quellen der VCL, die du postest, sind bestimmt nicht freigegeben. Und die meinte er.
 Welche Datentypen verwendest du denn in der Tabelle?
 Bezüglich ftWideString:
 Das mag durchaus sein, dass Delphi 4 das an der Stelle noch nicht als Feldtyp unterstützt hat.
 Da sollte helfen, wenn du einen Stringtyp in deiner Tabelle benutzt, der nicht Unicode ist. Dann sollte als Feldtyp auch adVarChar kommen, und das wird ja unterstützt.
 Zudem ist es auch nicht so sinnvoll in den VCL Quellen etwas zu ändern. Das bringt nur Probleme. |  |  |  
| Peter18  
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Di 18.03.14 12:26 
 
Hallo baumina,
 Danke für Deine Antwort. Es kann so Einfach sein, wenn man die Peilung hat. Dieser Kronleuchter ist mir beim Experementieren auch gerade aufgegangen. Und nun sehe ich die Strings auch in der Tabelle.
 Danke!
 		                       Delphi-Quelltext 
 									| 1:2:
 
 |     adVarChar, adChar, adVarWChar:ADOFieldType := ftString;
 |  		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 |       If ADORecordSet.Fields[I].Type_ in [adVarChar, adVarBinary, adChar, adVarWChar] thenFieldDefs.Add(ADORecordSet.Fields[I].Name,
 ADOFieldType(ADORecordSet.Fields[I].Type_),
 ADORecordSet.Fields[I].DefinedSize, False)
 |  Hallo jaenicke,
 Deinen Einwand  	  | Zitat: |  	  | Die Quellen der VCL, die du postest, sind bestimmt nicht freigegeben. | 
  kann ich entkräften! Hier die Originalbeschreibung zu dem Download:
 	  | Zitat: |  	  | A Free ADO Dataset component with source code, includes support for Blob fields and Filters. | 
 Und hier ein Auszug aus der Beschreibung des Autors:  	  | Zitat: |  	  | You can use the source code for comercial and non-comercial use, but if you want to use this for comercial use, drop me an e-mail first, so I can know. | 
 Grüße von der Nordsee
 Peter |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 18.03.14 13:14 
 
Ah, ok, das heißt nur so wie das mit Delphi mitgelieferte TADODataset. Das war zwar keine gute Idee des Autors, aber das "ist dann eben so".   |  |  |  |