Iteration über eine Table-Control

Alle Themen rund um die Erstellung von Programmen
Antworten
FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Iteration über eine Table-Control

Beitrag von FDominicus »

Ich muß ein paar Daten von einer anderen Datenbank migrieren. Idee derzeit, ich generiere eine Query die bestimmte Elemente aus einer Tabelel einlieset.
Dieser Record soll angezeigt werden und evetl möchte ich noch einen Vergleich mit den hinzugefügten Daten machen.

Mein Code der bisher tut:

Code: Alles auswählen

LOCAL 
	sOneTableName is string
	dsQRYFrom, dsQRYCompare is Data Source
	sQuery, sCompareQuery are strings
	bResult is boolean
FOR EACH sOneTableName  OF arrTabellenNamen
	sQuery = [
		select plz,Ort,[Straße] from %1
	]
	sQuery = StringBuild(sQuery, sOneTableName)
	bResult = HExecuteSQLQuery(dsQRYFrom,hQueryDefault,sQuery)
	
	
	HReadFirst(dsQRYFrom)
	WHILE not HOut()
		TableDeleteAll(TABLE_ZuImportieren)
		TableAdd (TABLE_ZuImportieren, dsQRYFrom.plz + TAB + dsQRYFrom.Ort + TAB + dsQRYFrom.Straße)
		HReadNext(dsQRYFrom)	
		Info("Read Next entry")
		
	END
END

Wie man sehen kann, suche ich mir eine bestimmte Anzahl von Feldern heraus und möchte die dann einzeln nacheinander in einer table-Control ausgeben.

Ich mache es, indem ich dieses Control lösche und dann aus dem aktuellen QURY per TableAdd einfüge. Das geht so aber ich frage mich ob
man da nicht eleganter TableDisplay benutzen kann. Oder gibt es bessere Vorschläge wie ich einzelne Datensätze nacheinander anzeigen und dann weiterverrbeiten kann/soll.

Vielen Dank

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Iteration über eine Table-Control

Beitrag von Herbert »

Die elegante Lösung ist das nicht. Ich habe auch länger gebraucht, aus den klassischen Xbase-Gedanken wegzukommen und alles programmieren zu müssen. Zudem ist dieses Vorgehen langsamer.

Schneller und angenehmer ist, wenn du die Tabelle direkt mit dem Query verlinkst.
In der Description unter "Content" den Knopf "File/Query" angeben. Danach kannst du jede Spalte auf ein passendes Element aus dem Query verweisen.
Im Init-Teil deer Tabelle kannst eventuelle Parameter des Query zuweisen

Code: Alles auswählen

		MySource.ParamKUNR=Null
Null bitte zuweisen, wenn ein Parameter nicht verwendet wird. Windev schlägt da manchmal Falsches vor.

Willst später die Tabelle neu aufbauen lassen, machst einen

Code: Alles auswählen

TableDisplay(TABLE_ZuImportieren,tainit)
oder einen reExecuteQuery anstelle des tainit.
So verkürzt sich zugleich dein Code:

Code: Alles auswählen

FOR EACH dsQRYFrom
	TableDisplay(TABLE_ZuImportieren,tainit)
	Info("Read Next entry")
END

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Iteration über eine Table-Control

Beitrag von FDominicus »

Danke, ich war mir sicher es ging irgendwie mit TableDisplay.

Was mir nicht klar ist. Wiie verlinke ich diese Query, so daß Table sich die Daten aus dsFromQury holt
Table_ZuImportieren..Source =

oder was/wie sonst?

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Iteration über eine Table-Control

Beitrag von FDominicus »

Die Verbindung von der Query im Quelltext zum Inhlat des Table_Controls bekomme ich nicht hin:

Code: Alles auswählen

sQuery is string
bRval is boolean
sQueryName is string
sQuery = "select plz,ort,strasse from TmpAllAccessAdressen"

bRval = HExecuteSQLQuery(dsQuery, sQuery)
IF bRval THEN
	FileToMemoryTable(TABLE_Test, dsQuery)
END
TableDisplay(TABLE_Test,1)

Zeigt alle DatenSätze in Table_Test an.
Was ich möchte ist die Query laufen lassen und dann in TableDisplay jeden einzelnen Record für sich anzeigen

In einer Aktoin BTN_next
soll TableDisplay(Table_name, taNext) sich dann den nächsten record holen

FileToMemory is es in der Form nicht, was genau soll ich benutzen?

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Iteration über eine Table-Control

Beitrag von FDominicus »

Nun habe ich was ich wollte:

Code: Alles auswählen


sQuery is string
bRval is boolean
sQueryName is string
sQuery = "select plz,ort,strasse from TmpAllAccessAdressen"

bRval = HExecuteSQLQuery(dsQuery, sQuery)
IF bRval THEN
	FileToMemoryTable(TABLE_Test,dsQuery)
END
gnCurPos = 1
TableDisplay(TABLE_Test,gnCurPos)

Jetzt kapiere ich erst die Dokumentation. Es handelt um einen memory Table control und taFirst, etc machen genau nichts
Dann bleibt noch zu klären wie ich ein Browsing Table Control da hinbekomme. Mal schauen...

Das hat mich ungemein viel Zeit gekostet.

Antworten