deutschsprachige FoxPro User Group
Forum View
Home
  
  Import-Strategie- #24455 in section [744280]
Sec: (1) Allgemeines
Von: Cyprian Kuschka
An: Fritz Maurhofer
Am/Um: 03.10.2025 08:24:00 gelesen

Lieber Fritz,

 

Etwas geholfen hat, wenn man den User vorformatierte Arbeitsblätter zur Verfügung gestellt hat.





Klar, es ist eine Grundvoraussetzung, absolut!


 

Da in jede Excel Zelle grundsätzlich irgendwas stehen kann, kommst Du nicht darum herum, für jede zu importierende Spalte eine Prüfregel zu implementieren und jeden Wert mindestens in den korrekten Datentyp zu konvertieren. Dann schmeisst Dir der Fuchs wenigstens keinen Fehler beim insert.




Die Schleife habe ich mit folgenden Schritten versehen:

In einer Tabelle habe ich zu den einzelnen Spalten die Bezüge eingetragen.

Dann lese ich die einzelnen Felder der Excelzeilen aus:

SCAN
lcFieldName = ALLTRIM(importmapping.VfpField)
IF EMPTY(NVL(lcFieldName,""))
LOOP
ENDIF
lcExcelColumn = importmapping.ExcelCol
IF EMPTY(NVL(lcExcelColumn,""))
LOOP
ENDIF
llRequired = NVL(importmapping.Obligat,.f.)
lcDefaultValue = NVL(importmapping.StandardW,"")

* Wert aus der Excel-Zelle lesen
lcValue = ALLTRIM(TRANSFORM(oSheet.Cells(lnRow, lcExcelColumn).Value))

* Wenn das Feld leer ist und erforderlich, Standardwert verwenden
IF EMPTY(lcValue) AND llRequired
lcValue = lcDefaultValue
ENDIF

* Formatprüfung und Konvertierung
lcFieldType = TYPE(NVL("caaw_import." + lcFieldName,""))

DO CASE
CASE lcFieldType == "C" && Zeichenkette
lcConvertedValue = TRIM(TRANSFORM(lcValue))
CASE lcFieldType == "N" && Numerisch
lcConvertedValue = VAL(lcValue)
CASE lcFieldType == "D" && Datum
IF LEN(lcValue)> 10 && Datetime
lcConvertedValue = CTOD(SUBSTR(lcValue, 1, 10))
ELSE
lcConvertedValue = CTOD(lcValue)
ENDIF
CASE lcFieldType == "T" && Datum/Zeit
lcConvertedValue = TTOC(CTOT(lcValue))
CASE lcFieldType == "L" && Logisch
IF EMPTY(lcValue)
lcConvertedValue = .F. && Leere Werte als .F. behandeln
ELSE
lcConvertedValue = IIF(UPPER(ALLTRIM(lcValue)) == ".T." OR lcValue == "T", .T., .F.)
ENDIF
OTHERWISE
lcConvertedValue = TRIM(NVL(lcValue,"")) && Unverändert lassen, wenn unbekannter Typ
ENDCASE

* Feld in der Zieltabelle füllen
REPLACE (lcFieldName) WITH lcConvertedValue IN caaw_import
ENDSCAN

Fertig.

Die Folge, womit ich nicht gerechnet habe, totales Chaos

Was meinst Du dazu



Viele Grüße

Cyprian



Cyprian Kuschka   25.09.2025 13:14
Wolfgang Pasler  02.10.2025 10:21
Cyprian Kuschka  03.10.2025 07:54
Fritz Maurhofer  02.10.2025 15:30
Cyprian Kuschka  03.10.2025 08:24
Fritz Maurhofer  03.10.2025 10:51
Cyprian Kuschka  03.10.2025 11:16
Fritz Maurhofer  04.10.2025 18:14
Cyprian Kuschka  06.10.2025 06:24
joachim hilgers  06.10.2025 12:02
Hans-Peter Grözinger  07.10.2025 14:48
Cyprian Kuschka  11.10.2025 09:06
  
zurück zum Forum