Diese Seite mit anderen teilen ...

Informationen zum Thema:
Forum:
WinDev Forum
Beiträge im Thema:
13
Erster Beitrag:
vor 1 Woche, 3 Tagen
Letzter Beitrag:
vor 6 Tagen, 8 Stunden
Beteiligte Autoren:
Giovanni Carella, Fabrice Harari, Xavier Schauwvlieghe, Gianni Spano

WD22 - Problem on memory with HAdd()/Hmodify

Startbeitrag von Giovanni Carella am 12.01.2018 12:08

Hi guys,
i have a problem.

I have a xls with up 300.000 line and the file is 17Mb. I want to import this xls in my database.
I fill a table with data found in xls, the memory of the exe is up 500Mb in this moment.

I have a procedure to import the data found in the table, in this procedure i have
4 different HAdd and 6 different HModify.

In the middle of the import (more or less) the program close illegally without error, the memory of the exe is up of 1800Mb.

Can you help me?

Antworten:

Hi Giovanni,

if I remember correctly, xls files were originally limited to 65535 lines. Now, recent excel versions can manage more, but windev can not, hence your problem, I would guess...

So you could try transforming it first into an xlsX, where there is no limit, and see if windev/your code can manage it, but personnaly I prefer to saveas csv and import the csv. In that case, I have successfully imported files of ANY size, with the appropriate code, of course.

Best regards

von Fabrice Harari - am 12.01.2018 12:54
Hello Gianni

I suggest you to import directly the xls records using an external tool like SqlYOG.
(I suppose you are using MySql db).

It allow you to easily import the data without limitations.

HTH

Gianni

von Gianni Spano - am 12.01.2018 12:58
*Gianni

I have to use my tool becouse this import can be runned from the end user.

*Facrice

The code with the problem is this


FOR i = 1 _TO_ TABLE_ArticoliSele..Occurrence
HTransactionStart(WiNeMo_connection)

PROGBAR_totale..Value++

codice_art.prec=TABLE_ArticoliSele.COL_Precodice
codice_art.cod=TABLE_ArticoliSele.COL_Codice

EDT_Numero_articoli_nel_foglio++

key_articoli is string =HFilterIdentical(articoli,AI_AZIENDAAI_CAPOCODIAI_CODIREST,gsAzienda,codice_art.prec,NoSpace(codice_art.cod))
HReadFirst(articoli,key_articoli)
IF HFound(articoli)=True THEN

IF RADIO_Vista_radio_button>1 THEN
IF RADIO_Vista_radio_button=2 THEN
xValoreNew+=TABLE_ArticoliSele.COL_Listino_1
xValoreOld+=articoli.AI_LIS_EURO1
END
IF RADIO_Vista_radio_button=3 THEN
xValoreNew+=TABLE_ArticoliSele.COL_Costo
xValoreOld+=articoli.AI_COS_EURO
END
END

IF TABLE_ArticoliSele.COL_Descrizione"" AND CBOX_Descrizione=True THEN
articoli.AI_DESCRIZI=TABLE_ArticoliSele.COL_Descrizione
END
IF TABLE_ArticoliSele.COL_Cod_IVA"" AND CBOX_CodIVA=True THEN
articoli.AI_CODICIVA=TABLE_ArticoliSele.COL_Cod_IVA
END
IF TABLE_ArticoliSele.COL_Listino_10 AND CBOX_list1=True THEN
IF RADIO_Vista_radio_button=2 THEN
articoli.AI_LPR_EURO1=articoli.AI_LIS_EURO1
END
articoli.AI_LIS_EURO1=TABLE_ArticoliSele.COL_Listino_1
articoli.AI_DAT_VALI1=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_20 AND CBOX_list2=True THEN
IF RADIO_Vista_radio_button=2 THEN
articoli.AI_LPR_EURO2=articoli.AI_LIS_EURO2
END
articoli.AI_LIS_EURO2=TABLE_ArticoliSele.COL_Listino_2
articoli.AI_DAT_VALI2=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_30 AND CBOX_list3=True THEN
IF RADIO_Vista_radio_button=2 THEN
articoli.AI_LPR_EURO3=articoli.AI_LIS_EURO3
END
articoli.AI_LIS_EURO3=TABLE_ArticoliSele.COL_Listino_3
articoli.AI_DAT_VALI3=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_40 AND CBOX_list4=True THEN
IF RADIO_Vista_radio_button=2 THEN
articoli.AI_LPR_EURO4=articoli.AI_LIS_EURO4
END
articoli.AI_LIS_EURO4=TABLE_ArticoliSele.COL_Listino_4
articoli.AI_DAT_VALI4=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_50 AND CBOX_list5=True THEN
IF RADIO_Vista_radio_button=2 THEN
articoli.AI_LPR_EURO5=articoli.AI_LIS_EURO5
END
articoli.AI_LIS_EURO5=TABLE_ArticoliSele.COL_Listino_5
articoli.AI_DAT_VALI5=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Gr_merc"" AND CBOX_GrMerc=True THEN
articoli.AI_CATEMERC=TABLE_ArticoliSele.COL_Gr_merc
END
IF TABLE_ArticoliSele.COL_Costo0 AND CBOX_Costo=True THEN
articoli.AI_COS_EURO=TABLE_ArticoliSele.COL_Costo
END
IF TABLE_ArticoliSele.COL_Gr_sconto"" AND CBOX_GrSconto=True THEN
articoli.ai_grupscon=TABLE_ArticoliSele.COL_Gr_sconto
END
IF TABLE_ArticoliSele.COL_Forn_abi"" AND CBOX_Forn=True THEN
articoli.AI_fornitor=TABLE_ArticoliSele.COL_Forn_abi
END
IF TABLE_ArticoliSele.COL_Barcode"" AND CBOX_barcode=True THEN
articoli.ai_barcode=TABLE_ArticoliSele.COL_Barcode
END
IF TABLE_ArticoliSele.COL_UM1"" AND CBOX_UnMis1=True THEN
articoli.AI_UNIMIS_1=TABLE_ArticoliSele.COL_UM1
END
IF TABLE_ArticoliSele.COL_UM2"" AND CBOX_UnMis2=True THEN
articoli.AI_UNIMIS_2=TABLE_ArticoliSele.COL_UM2
END
IF TABLE_ArticoliSele.COL_Qta_x_conf"" AND CBOX_QtaConf=True THEN
articoli.AI_RIORMINI=TABLE_ArticoliSele.COL_Qta_x_conf
END
IF TABLE_ArticoliSele.COL_Cod_ricavo"" AND CBOX_CodRic=True THEN
articoli.AI_COD_RICA=TABLE_ArticoliSele.COL_Cod_ricavo
END
IF TABLE_ArticoliSele.COL_Cod_costo"" AND CBOX_CodCos=True THEN
articoli.AI_COD_COST=TABLE_ArticoliSele.COL_Cod_costo
END
IF TABLE_ArticoliSele.COL_Art_Par"" AND CBOX_ArtPart=True THEN
articoli.AI_ART_PART=TABLE_ArticoliSele.COL_Art_Par
END
IF TABLE_ArticoliSele.COL_Nom_Comb"" AND CBOX_Nomencl=True THEN
articoli.ai_nomecomb=TABLE_ArticoliSele.COL_Nom_Comb
END
IF TABLE_ArticoliSele.COL_Tipo_stoc"" AND CBOX_TipoStoc=True THEN
articoli.ai_tipostoc=TABLE_ArticoliSele.COL_Tipo_stoc
END
IF TABLE_ArticoliSele.COL_Fatt_Conv"" AND CBOX_FatConv=True THEN
articoli.AI_CONVERSI=TABLE_ArticoliSele.COL_Fatt_Conv
END
IF TABLE_ArticoliSele.COL_Note"" AND CBOX_Note=True THEN
articoli.AI_NOTE=TABLE_ArticoliSele.COL_Note
END
IF TABLE_ArticoliSele.Col_Art_Stock0 AND CBOX_ArtStock=True THEN
articoli.AI_FL_STOCK=TABLE_ArticoliSele.Col_Art_Stock
END
articoli.ai_DataVaria=DateSys()
articoli.ai_OraVaria=TimeSys()
articoli.ai_dtoravaria=NumToString(DateSys(), “8d”)+TimeToString(TimeSys(),"HHMMSS")
HModify(articoli,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)
TABLE_ArticoliSele..BrushColor=PastelBlue
EDT_Numero_articoli_variati++
TABLE_ArticoliSele.COL_VARIAZIONE=1

//Modifico i dati
ELSE
HReset(articoli)
IF CBOX_CreoNuovo=True THEN
// creo il nuovo articolo
IF NoSpace(codice_art.prec)="" AND NoSpace(codice_art.cod)="" THEN
CONTINUE
END
articoli.AI_AZIENDA=gsAzienda
articoli.ai_codiarti=codice_art.prec+NoSpace(codice_art.cod)
articoli.AI_CAPOCODI=NoSpace(codice_art.prec)
articoli.AI_CODIREST=NoSpace(codice_art.cod)
articoli.AI_CODICIVA=tabvar.tava_codi_iva
articoli.AI_COD_RICA=tabvar.tava_cod_rica
articoli.AI_COD_COST=tabvar.tava_cod_cost

IF TABLE_ArticoliSele.COL_Descrizione"" THEN
articoli.AI_DESCRIZI=TABLE_ArticoliSele.COL_Descrizione
END
IF TABLE_ArticoliSele.COL_Cod_IVA"" THEN
articoli.AI_CODICIVA=TABLE_ArticoliSele.COL_Cod_IVA
END
IF TABLE_ArticoliSele.COL_Listino_10 THEN
articoli.AI_LIS_EURO1=TABLE_ArticoliSele.COL_Listino_1
articoli.AI_DAT_VALI1=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_20 THEN
articoli.AI_LIS_EURO2=TABLE_ArticoliSele.COL_Listino_2
articoli.AI_DAT_VALI2=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_30 THEN
articoli.AI_LIS_EURO3=TABLE_ArticoliSele.COL_Listino_3
articoli.AI_DAT_VALI3=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_40 THEN
articoli.AI_LIS_EURO4=TABLE_ArticoliSele.COL_Listino_4
articoli.AI_DAT_VALI4=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Listino_50 THEN
articoli.AI_LIS_EURO5=TABLE_ArticoliSele.COL_Listino_5
articoli.AI_DAT_VALI5=EDT_Data_Aggiornamento
END
IF TABLE_ArticoliSele.COL_Gr_merc"" THEN
articoli.AI_CATEMERC=TABLE_ArticoliSele.COL_Gr_merc
END
IF TABLE_ArticoliSele.COL_Costo0 THEN
articoli.AI_COS_EURO=TABLE_ArticoliSele.COL_Costo
END
IF TABLE_ArticoliSele.COL_Gr_sconto"" THEN
articoli.ai_grupscon=TABLE_ArticoliSele.COL_Gr_sconto
END
IF TABLE_ArticoliSele.COL_Forn_abi"" THEN
articoli.AI_fornitor=TABLE_ArticoliSele.COL_Forn_abi
END
IF TABLE_ArticoliSele.COL_Barcode"" THEN
articoli.ai_barcode=TABLE_ArticoliSele.COL_Barcode
END
IF TABLE_ArticoliSele.COL_UM1"" THEN
articoli.AI_UNIMIS_1=TABLE_ArticoliSele.COL_UM1
END
IF TABLE_ArticoliSele.COL_UM2"" THEN
articoli.AI_UNIMIS_2=TABLE_ArticoliSele.COL_UM2
END
IF TABLE_ArticoliSele.COL_Qta_x_conf"" THEN
articoli.AI_RIORMINI=TABLE_ArticoliSele.COL_Qta_x_conf
END
IF TABLE_ArticoliSele.COL_Cod_ricavo"" THEN
articoli.AI_COD_RICA=TABLE_ArticoliSele.COL_Cod_ricavo
END
IF TABLE_ArticoliSele.COL_Cod_costo"" THEN
articoli.AI_COD_COST=TABLE_ArticoliSele.COL_Cod_costo
END
IF TABLE_ArticoliSele.COL_Art_Par"" THEN
articoli.AI_ART_PART=TABLE_ArticoliSele.COL_Art_Par
END
IF TABLE_ArticoliSele.COL_Nom_Comb"" THEN
articoli.ai_nomecomb=TABLE_ArticoliSele.COL_Nom_Comb
END
IF TABLE_ArticoliSele.COL_Tipo_stoc"" THEN
articoli.ai_tipostoc=TABLE_ArticoliSele.COL_Tipo_stoc
END
IF TABLE_ArticoliSele.COL_Fatt_Conv"" THEN
articoli.AI_CONVERSI=TABLE_ArticoliSele.COL_Fatt_Conv
END
IF TABLE_ArticoliSele.COL_Note"" THEN
articoli.AI_NOTE=TABLE_ArticoliSele.COL_Note
END

articoli.ai_stato=Left(COMBO_Ai_stato..DisplayedValue,2)
articoli.AI_DT_CREAZ=EDT_Data_Aggiornamento
articoli.ai_DataVaria=DateSys()
articoli.ai_OraVaria=TimeSys()
articoli.ai_dtoravaria=NumToString(DateSys(), “8d”)+TimeToString(TimeSys(),"HHMMSS")

HAdd(articoli,hIgnoreDuplicates+hIgnoreIntegrity)
TABLE_ArticoliSele..BrushColor=PastelGreen
EDT_Numero_articoli_variati++
TABLE_ArticoliSele.COL_VARIAZIONE=1
END
END


IF COL_Posizione"" THEN
sKey_posart = HFilterIdentical(Posart,POAR_AZIENDAPOAR_DEPOSIPOAR_ARTICO1,gsAzienda,EDT_Deposito,codice_art.prec+NoSpace(codice_art.cod))
HReadFirst(Posart,sKey_posart)
IF HFound(Posart) THEN
Posart.POAR_POSIZI=COL_Posizione
HModify(Posart,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)
ELSE
Posart.POAR_ARTICO=codice_art.prec+NoSpace(codice_art.cod)
Posart.POAR_AZIENDA=gsAzienda
Posart.POAR_DEPOSI=EDT_Deposito
Posart.POAR_POSIZI=COL_Posizione
Posart.POAR_QTAPOS=0
HAdd(Posart,hIgnoreDuplicates+hIgnoreIntegrity)
END
HDeactivateFilter(Posart)
END

IF RADIO_Vista_radio_button=2 AND EDT_AI_fornitor>0 THEN
sKeylistforn=HFilterIdentical(listforn,sapf_aziendasapf_codiartisapf_fornitor,gsAzienda,articoli.ai_codiarti,EDT_AI_fornitor)
HReadFirst(listforn,sKeylistforn)
IF HFound(listforn) THEN
listforn.sapf_prz_list=TABLE_ArticoliSele.COL_Listino_1
listforn.sapf_dt_va_li=EDT_Data_Aggiornamento
IF listforn.sapf_per_scon0 THEN
listforn.sapf_prz_nett=Round((listforn.sapf_prz_list-(listforn.sapf_prz_list*listforn.sapf_per_scon/100)),5)
listforn.sapf_prz_nett=Round((listforn.sapf_prz_nett-(listforn.sapf_prz_nett*listforn.sapf_per_sco2/100)),5)
listforn.sapf_prz_nett=Round((listforn.sapf_prz_nett-(listforn.sapf_prz_nett*listforn.sapf_per_sco3/100)),5)
END
HModify(listforn,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)
ELSE
xSc1=0
xSc2=0
sKeytabscf=HFilterIdentical(tabscf,tscf_aziendatscf_fornittscf_grusco,gsAzienda,EDT_AI_fornitor,articoli.ai_grupscon)
HReadFirst(tabscf,sKeytabscf)
IF HFound(tabscf) THEN
xSc1=tabscf.tscf_scont1
xSc2=tabscf.tscf_scont2
END
HDeactivateFilter(tabscf)
IF xSc1=0 THEN
xSc1=articoli.AI_SCO_RIFE
END
HReset(listforn)
listforn.sapf_azienda=gsAzienda
listforn.sapf_codiarti=articoli.ai_codiarti
listforn.sapf_fornitor=EDT_AI_fornitor
listforn.sapf_prz_list=TABLE_ArticoliSele.COL_Listino_1
listforn.sapf_per_scon=xSc1
listforn.sapf_per_sco2=xSc2
listforn.sapf_prz_list=articoli.AI_LIS_EURO1
listforn.sapf_prz_nett=Round((listforn.sapf_prz_list-(listforn.sapf_prz_list*xSc1/100)),5)
listforn.sapf_prz_nett=Round((listforn.sapf_prz_nett-(listforn.sapf_prz_nett*xSc2/100)),5)
listforn.sapf_dt_va_li=EDT_Data_Aggiornamento
HAdd(listforn,hIgnoreDuplicates+hIgnoreIntegrity)
END
HDeactivateFilter(listforn)
END

IF RADIO_Vista_radio_button=3 THEN
sKeylistforn=HFilterIdentical(listforn,sapf_aziendasapf_codiartisapf_fornitor,gsAzienda,articoli.ai_codiarti,EDT_AI_fornitor)
HReadFirst(listforn,sKeylistforn)
IF HFound(listforn) THEN
IF CBOX_Offerta_temp=1 THEN
listforn.sapf_prz_off=TABLE_ArticoliSele.COL_Costo
listforn.sapf_dt_i_of=EDT_Dt_Inizio
listforn.sapf_dt_f_of=EDT_Dt_fine
ELSE
listforn.sapf_prz_nett=TABLE_ArticoliSele.COL_Costo
listforn.sapf_dt_va_li=EDT_Data_Aggiornamento
IF CBOX_Distinta_netti=1 THEN
listforn.sapf_per_scon=0
listforn.sapf_per_sco2=0
listforn.sapf_per_sco3=0
ELSE
IF listforn.sapf_prz_list0 THEN
listforn.sapf_per_scon=Abs(((TABLE_ArticoliSele.COL_Costo*100)/listforn.sapf_prz_list)-100)
listforn.sapf_per_sco2=0
listforn.sapf_per_sco3=0
END
END
END
HModify(listforn,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)
ELSE
xSc1=0
xSc2=0
sKeytabscf=HFilterIdentical(tabscf,tscf_aziendatscf_fornittscf_grusco,gsAzienda,EDT_AI_fornitor,articoli.ai_grupscon)
HReadFirst(tabscf,sKeytabscf)
IF HFound(tabscf) THEN
xSc1=tabscf.tscf_scont1
xSc2=tabscf.tscf_scont2
END
HDeactivateFilter(tabscf)
IF xSc1=0 THEN
xSc1=articoli.AI_SCO_RIFE
END
HReset(listforn)
listforn.sapf_azienda=gsAzienda
listforn.sapf_codiarti=articoli.ai_codiarti
listforn.sapf_fornitor=EDT_AI_fornitor
listforn.sapf_prz_list=articoli.AI_LIS_EURO1
listforn.sapf_per_scon=xSc1
listforn.sapf_per_sco2=xSc2
IF CBOX_Offerta_temp=1 THEN
listforn.sapf_prz_nett=Round((listforn.sapf_prz_list-(listforn.sapf_prz_list*xSc1/100)),5)
listforn.sapf_prz_nett=Round((listforn.sapf_prz_nett-(listforn.sapf_prz_nett*xSc2/100)),5)
listforn.sapf_prz_off=TABLE_ArticoliSele.COL_Costo
listforn.sapf_dt_i_of=EDT_Dt_Inizio
listforn.sapf_dt_f_of=EDT_Dt_fine
ELSE
listforn.sapf_prz_nett=TABLE_ArticoliSele.COL_Costo
IF CBOX_Distinta_netti=1 THEN
listforn.sapf_per_scon=0
listforn.sapf_per_sco2=0
listforn.sapf_per_sco3=0
ELSE
IF listforn.sapf_prz_list0 THEN
listforn.sapf_per_scon=Abs(((TABLE_ArticoliSele.COL_Costo*100)/listforn.sapf_prz_list)-100)
listforn.sapf_per_sco2=0
listforn.sapf_per_sco3=0
END
END
END
HAdd(listforn,hIgnoreDuplicates+hIgnoreIntegrity)
END
HDeactivateFilter(listforn)
END

IF RADIO_Vista_radio_button>1 AND CBOX_Cambio_costo=1 AND listforn.sapf_prz_nett>0 THEN
HReadFirst(articoli,key_articoli)
IF HFound(articoli) THEN
articoli.AI_COP_EURO=articoli.AI_COS_EURO
articoli.AI_COS_EURO=listforn.sapf_prz_nett
articoli.AI_DT_VA_CO=EDT_Data_Aggiornamento
IF CBOX_Distinta_netti=1 THEN
articoli.AI_FL_NETTO="S"
END
HModify(articoli,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)
END
END
IF TABLE_ArticoliSele.COL_Stato="2" OR TABLE_ArticoliSele.COL_Stato="9" THEN
HReadFirst(articoli,key_articoli)
IF HFound(articoli) THEN
HExecuteQuery(QRY_Ut_Giacenza_tutti_depositi,hQueryDefault,gsAzienda,tabvar.tava_anno_lav,articoli.ai_codiarti)
HReadFirst(QRY_Ut_Giacenza_tutti_depositi)
IF HFound(QRY_Ut_Giacenza_tutti_depositi) THEN
IF QRY_Ut_Giacenza_tutti_depositi.sum_AD_GIACENZA+QRY_Ut_Giacenza_tutti_depositi.sum_ad_giacenza_ap>0 THEN
articoli.ai_BlocOrdForn=1
ELSE
articoli.ai_stato="03"
END
HModify(articoli,hRecNumCurrent,hIgnoreDuplicates+hIgnoreIntegrity)

END
END
END
HFreeQuery(QRY_Ut_Giacenza_tutti_depositi)
END


von Giovanni Carella - am 12.01.2018 15:39
Now I'm confused...

do yo have the problem when importing the xls into a DB file, or later, when processing the DB file itself?

von Fabrice Harari - am 12.01.2018 17:56
I have a problem when process the data file.

von Giovanni Carella - am 12.01.2018 18:16
Update:

i have test my code from yesterday i have uderstand that the problem is not Hadd()/Hmodify.

Now i think the problem is Hreadxxx function...

von Giovanni Carella - am 13.01.2018 08:43
OK, so we can forget everything about excel...

Let see If I understand the original question now...

So, tell me if I'm right :
- your program is running in 32 bits
- you are doing a TON of stuff inside ONE TRANSACTION, which means that everything needs to be kept in memory
- When your program reach 2 GB (limit for 32 bits), it crashes... Which is perfectly normal considering the above.

Solutions :
1. Switch to 64 bits and process on a machine with a TON of RAM (will still crash if not enough RAM/size of file to process
2. PREFERRED: remove the transaction, so that each record is processed individually.

Best regards

von Fabrice Harari - am 13.01.2018 11:47
Thaks Fabrice... At last how to disable transaction?

von Giovanni Carella - am 14.01.2018 15:51
Hi...

well...

your code nearly STARTS with ...HTransactionStart(WiNeMo_connection)...

So I would say that the solution is to NOT start a transaction (and remove everything regarding transactions from your code).

Best regards

von Fabrice Harari - am 15.01.2018 13:02
I tried...

the problem persist on 32bit version.

von Giovanni Carella - am 16.01.2018 08:33
Hi Giovanni,

does this problem occurs in runtime or during testing when developing?

If it is during testing, check if the option Dynamic Audit is enabled.
If so, then disable the Dynamic Audit and try again.

kind regads,
Xavier

von Xavier Schauwvlieghe - am 16.01.2018 08:54
it happens in both cases

von Giovanni Carella - am 16.01.2018 09:36
Zur Information:
MySnip.de hat keinen Einfluss auf die Inhalte der Beiträge. Bitte kontaktieren Sie den Administrator des Forums bei Problemen oder Löschforderungen über die Kontaktseite.
Falls die Kontaktaufnahme mit dem Administrator des Forums fehlschlägt, kontaktieren Sie uns bitte über die in unserem Impressum angegebenen Daten.