Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von Klaus Schuster »

Moin,

ein mit

Code: Alles auswählen

USqlStatement():New():Select( {{ 1 }} ):From( {{cAlias, "cAlias"}} ):Build():Query( USQL_RESULT_OBJECTS, @aDaten )
erzeugtes DateObject enthält 0 oder 1 bei logischen Werten. Gibt es einen Trick, damit diese als .T. oder .F. übergeben werden?
Gruß Klaus
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von Marcus Herz »

Hallo Klaus
Mir ist nicht ganz klar, welche Datei du abfrägst. Es gibt SQL DBMS, welche Logisch nur als 0/1 kennen. Ist das hier der Fall?
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von Klaus Schuster »

Sorry Marcus, es handelt sich um eine DBF-Datei.
Gruß Klaus
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von Marcus Herz »

Gabs dazu nicht mal ein PDR. Kann mich grob errinnern, dass es ein Statement von Alaksa dazu gab. Find ich aber nicht auf die Schnelle. 0/1 für logisch ist in SQL Welt durchaus normal.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von brandelh »

Marcus Herz hat geschrieben: Di, 27. Apr 2021 13:11 Gabs dazu nicht mal ein PDR. Kann mich grob errinnern, dass es ein Statement von Alaksa dazu gab. Find ich aber nicht auf die Schnelle. 0/1 für logisch ist in SQL Welt durchaus normal.
nicht nur dort, in vielen Sprachen gibt es kein Datentyp Logisch, sondern nur LONG = 0 (falsch) oder <> 0 (wahr), was manches einfacher macht bei Fremd DLLs die das meist auch so sehen.

Als Workaround ein aEval() durchlaufen lassen und iif(n <> 0 , .t., .f.) setzen lassen
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von Klaus Schuster »

Danke Hubert,

ganz so einfach ist es leider nicht, da ja nicht alle Felder boolean sind. Ich habe mir so beholfen:

Code: Alles auswählen

   // Datensaetze einlesen
   USqlStatement():New():Select( {{ 1 }} ):From( {{cAlias, "cAlias"}} ):Build():Query( USQL_RESULT_OBJECTS, @aDaten )

   // Namen aller Felder des Typs 'L' ermitteln
   AEval( aDbStruct, {| aX, nFeld | IIf( aX[ DBS_TYPE ] == 'L', AAdd( aBoolean, aX[ DBS_NAME ]), NIL )})

   // Mangel ausgleichen, dass fuer Boolean-Werte 0 und 1 zurueckgegeben werden

   IF ! Empty( aBoolean )
      aDaten := DaoBoolean( aBoolean, aDaten )

   ENDIF

Code: Alles auswählen

FUNCTION DaoBoolean( aBoolean, aDaten )

   LOCAL nElement := 0

   // In allen iVars/Feldern aus aBoolean eine 1 auf TRUE und eine 0 auf FALSE umsetzen

   FOR nElement := 1 TO Len( aDaten )
      AEval( aBoolean, {| cFeld | aDaten[ nElement ]:&(cFeld) := IIf( aDaten[ nElement ]:&(cFeld) == 1, TRUE, FALSE )})

   NEXT

RETURN( aDaten )
Gruß Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Logische Werte werden in einem DataObject als 0 oder 1 eingetragen

Beitrag von brandelh »

du musst natürlich wissen welche Feldnamen logisch und welche numerisch sein sollen
Gruß
Hubert
Antworten