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
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
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Mo., 11.10.2004 - 08:28
Permalinkkann es sein, dass es an theQuery2 liegt?
Versuchs doch mal damit:
theQuery = "["+ID+"]="+"EFKG"
Hgzh
Jörg
Gespeichert von Sus am Mo., 11.10.2004 - 11:14
PermalinkWenn 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
Gespeichert von Gast am Mo., 11.10.2004 - 11:28
PermalinkKö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
Gespeichert von Sus am Mo., 11.10.2004 - 11:36
PermalinkVielleicht 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]
Gespeichert von Gast am Mo., 11.10.2004 - 11:43
Permalinkoder
"["+ID.GetName+"]="
Gespeichert von Gast am Mo., 11.10.2004 - 11:50
PermalinkAlso statt:
ID = theBewVTab.FindField("Id")
besser
theIDField = theBewVTab.FindField("Id")
o.ä. schreiben
Gespeichert von Sus am Mo., 11.10.2004 - 11:52
PermalinkDanke nochmal.
Gespeichert von Gast am Mo., 11.10.2004 - 11:59
PermalinktheQuery2 = "[Id] = " "EFKG"
sollte so aussehen:
theQuery2 = "[Id] = EFKG"
oder so:
theQuery2 = "[Id] = "+"EFKG"
oder so:
theQuery2 = "["+ID.GetName+"]= EFKG"
Gespeichert von Sus am Mo., 11.10.2004 - 12:13
PermalinkGespeichert von uwelangehh am Mo., 11.10.2004 - 13:58
Permalinkich finde den Vorschlag von GAST gut:
Könntest Du mal den gesamten Code mailen?
Uwe
Gespeichert von Sus am Mo., 11.10.2004 - 14:07
PermalinkGerne 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
Gespeichert von uwelangehh am Mo., 11.10.2004 - 14:30
Permalinkmich 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
Gespeichert von Sus am Di., 12.10.2004 - 14:19
PermalinkDanke 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
Gespeichert von Maxilla am Di., 12.10.2004 - 14:23
PermalinkGespeichert von Sus am Di., 12.10.2004 - 14:34
PermalinkGespeichert von Maxilla am Di., 12.10.2004 - 14:49
PermalinkIch 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ß