Wert von einer Tabelle in einer anderen Tabelle üb

Hallo Avenue Programmierer!
Wieder komme ich einmal nicht weiter. Mein Wunsch ist von einer Vtab einen Wert aus einer Spalte in einer Zeile auszulesen und dann in eine Zeile/Spalte einer anderen VTab einzutragen. Ich arbeite mit AV 3.2 und mein Code lautet folgendermaßen:
polygonthema = theComboBox1.GetSelection.GetFTab
polygonthema.SetEditable(true)
Spalte1 = polygonthema.FindField("KG")
bewertung = av.GetProject.FindDoc("Gebaeudebewertung.dbf")
theBewVTab = bewertung.GetVTab
theBewVTab.SetEditable(true)
ID = theBewVTab.FindField("Id")
Preisfeld = theBewVTab.FindField("Wertpm³")
theBitmap2 = theBewVTab.GetSelection
theQuery2 = "[Id] = " "EFKG"

theBewVTab.Query(theQuery2, theBitmap2, #VTAB_SELTYPE_NEW)
theBewVTab.UpdateSelection
for each r in theBewVTab.GetSelection
polyAuswahl = theBewVTab.ReturnValueString(Preisfeld,r)
for each rec in polygonthema
Wert = polygonthema.ReturnValue(Spalte1, rec)
if (Wert = 1) then
polygonthema.SetValue(Spalte1,rec,polyAuswahl)
end
end
end
irgendwie haut das aber nicht hin!! Kann mir bitte jemand helfen? Und vielleicht hat noch jemand einen Tipp wenn ich aus der Tabelle wo ich die Id auslese noch andere Werte auslesen will und in andere Zeilen der 2. Tabelle eintragen soll, wie das dann ausschauen soll. Vielen Dank im Voraus
Susanne
Moin Susanne,

kann es sein, dass es an theQuery2 liegt?
Versuchs doch mal damit:
theQuery = "["+ID+"]="+"EFKG"

Hgzh
Jörg
Hallo Jörg!
Wenn ich das mit der Query 2 austausche dann kommt die Fehlermeldung:
Wrong class for parameter 1 of request +. Got a field expected a string. Hast Du da vielleicht noch eine Idee?
LG
Susanne
Hallo Susanne,

Könntest Du mal den gesamten Code mailen. Wenn ich noch einmal genauer drüberschaue, verstehe ich nicht, was Du erreichen willst.

Gruß
Jörg

PS: Die Fehlermeldung erhälst Du, weil EFKG wohl ein Feld bezeichnet. Wenn Du z.B. in dem Feld [Name] nach dem Wert [Jörg] suchen möchtest, sieht der Code dazu wie folgt aus:

suche = "Jörg"
theQuery = "["+Name+"]="+suche
Hallo Jörg!
Vielleicht geht´s doch nochmal so: Wir sind nah dran - glaube ich. EFKG ist schon ein Wert. Das Feld ist [Name], wenn ich jetzt den Code abändere nach deinem 2. Vorschlag, dann kommt wieder die gleiche Fehlermeldung, weil ja beim Parameter 1 ein string erwartet wird und da verwende ich das Feld [Name]
"[ID]="

oder

"["+ID.GetName+"]="
Wenn du ein Feld als Variable definierst, solltest du das in der Variablenbezeichnung besser kenntlich machen. Das erspart Missverständnisse.

Also statt:

ID = theBewVTab.FindField("Id")

besser

theIDField = theBewVTab.FindField("Id")

o.ä. schreiben
Hallo, das war ja meine erste Version der Query, aber der Wert aus der Lookup Tabelle wird nicht in meine FTab übertragen, es tut sich einfach nichts, auch keine Fehlermeldung. Ich habe eine Lookup Tabelle erstellt in der es eine Spalte Id gibt und eine Spalte mit einem Wert drinnen. Ich will dann nach der Id auswählen und den Wert der ausgewählten Zeile in meine FTab übertragen. Wenn in der entsprechenden Spalte z.B. der Wert 1 eingetragen ist, dann soll überall, wo der Wert 1 steht nun der Wert aus der Lookup Tabelle stehen.
Danke nochmal.
Deine erste Version der Query:

theQuery2 = "[Id] = " "EFKG"

sollte so aussehen:

theQuery2 = "[Id] = EFKG"
oder so:
theQuery2 = "[Id] = "+"EFKG"
oder so:
theQuery2 = "["+ID.GetName+"]= EFKG"
Hallo Jörg Danke für deine Tipps aber ich habe alle Query Versionen probiert und es tut sich immer noch nix.
Hallo Sus,

ich finde den Vorschlag von GAST gut:

Könntest Du mal den gesamten Code mailen?

Uwe
Hallo!
Gerne ich habe schon mehrere Versionen versucht die 1. war mit 2 getrennten for each Schleifen, da wurde dann die Variable Auswahl der ersten Schleife nicht in der 2. Schleife erkannt oder durchlaufen.
Der 1. Versuch ist gekennzeichnet durch ' am Zeilenanfang, beim 2. Versuch habe ich dann versucht die beiden for each Schleifen miteinander zu verbinden:

theDialog = av.FindDialog("Nutzenerfassung_Gebaeude")
theControlPanel = theDialog.GetControlPanel

'Sucht im Dialog die Steuerelemente
'**********************************
theComboBox1 = theControlPanel.FindByName("ComboBox1")
theComboBox2 = theControlPanel.FindByName("ComboBox2")
theLabelButton2 = theControlPanel.FindByName("LabelButton2")

'Holt aus der ComboBox1 das gewählte Thema und macht es editierbar
'markiert alle Spalten mit dem Eintrag 1
'*****************************************************************
polygonthema = theComboBox1.GetSelection.GetFTab
polygonthema.SetEditable(true)
Spalte1 = polygonthema.FindField("KG")
theBitmap = polygonthema.GetSelection
theQuery = "[KG] = " "1"

polygonthema.Query(theQuery, theBitmap, #VTAB_SELTYPE_NEW)
polygonthema.UpdateSelection


'Holt die Tabelle Gebäudebewertung und markiert das Feld mit der ID
'******************************************************************
bewertung = av.GetProject.FindDoc("Gebaeudebewertung.dbf")
theBewVTab = bewertung.GetVTab
theBewVTab.SetEditable(true)
ID = theBewVTab.FindField("Id")
Preisfeld = theBewVTab.FindField("Wertpm³")
theBitmap2 = theBewVTab.GetSelection
Name = "EFKG"
'theQuery2 = "[Id] = " "EFKG"
theQuery2 = "[Id] = EFKG"

theBewVTab.Query(theQuery2, theBitmap2, #VTAB_SELTYPE_NEW)
theBewVTab.UpdateSelection
'for each selrec in theBewVTab.GetSelection
' IdFeld = theBewVTab.ReturnValue(Id, selrec)
' if (IdFeld = theQuery2) then
' Auswahl = theBewVTab.ReturnValueString(Preisfeld,selrec)
'end
'end

'for each rec in polygonthema
' polyvtab = theBewVTab.GetSelection
' Wert = polygonthema.ReturnValue(Spalte1, rec)
' if (Wert = 1) then
' polygonthema.SetValue(Spalte1,rec,Auswahl)
'end
'end

for each r in theBewVTab.GetSelection
polyAuswahl = theBewVTab.ReturnValueString(Preisfeld,r)
for each rec in polygonthema
Wert = polygonthema.ReturnValue(Spalte1, rec)
if (Wert = 1) then
polygonthema.SetValue(Spalte1,rec,polyAuswahl)
end
end
end
polygonthema.SetEditable(false)
theBewVTab.SetEditable(false)
Self.GetDialog.Close

Vielen Dank
Susanne
Hallo Sus,

mich machen folgende beiden Zeilen nachdenklich:

1. theQuery = "[KG] = " "1"

Handelt es sich um eine Zahl? Wenn ja, dann:

theQuery = "[KG] = 1", wenn nein:

theQuery = "[KG] = ""1"""

2. 'theQuery2 = "[Id] = " "EFKG"

muesste meines Erachtens heissen:

theQuery2 = "[Id] = ""EFKG"""
oder vielleicht geht auch:
theQuery2 = "[Id] = 'EFKG'"

Falls du in beiden Tabellen (FTab und VTab) gleich viele Datensaetze hast, dann benoetigst du moeglicherweise nur eine Schleife. Anderenfalls waere an dieser Stelle eine Erlaeuterung hilfreich.

for each r in theBewVTab.GetSelection
' Preis lesen
polyAuswahl = theBewVTab.ReturnValueString(Preisfeld,r)
Wert = polygonthema.ReturnValue(Spalte1, r)
'Text: if (Wert = "1") then
' Soll der Preis eingetragen werden?
if (Wert = 1) then
polygonthema.SetValue(Spalte1,r,polyAuswahl)
end
end

Viel Erfolg damit und Gruss

Uwe
Hallo Uwe!
Danke für deinen Tipp, die Selektion mit der Zahl funktioniert nun, aber die Auswahl mit dem String haut noch nicht so ganz hin, auch mit deinen Vorschlägen (theQuery2 = "[Id] = ""EFKG""" oder theQuery2 = "[Id] = 'EFKG'")
nicht - ich bin am Probieren, aber vielleicht hast du noch einen Tipp
LG
Susanne
theQuery2 = "[Id] = "+"EFKG".Quote
Danke Maxilla und allen anderen Helfern! Endlich funktioniert es!!!
an Uwe :

Ich weiß, hätte dann auch mit theQuery2 = "[Id] = ""EFKG""" funktionieren müssen, denn das ist ja das Gleiche wie theQuery2 = "[Id] = "+"EFKG".Quote - nur anders ausgedrückt. Nun ja...

Gruß