BASE: Übertrag eines Wertes zwischen zwei Tabellen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: BASE: Übertrag eines Wertes zwischen zwei Tabellen

Re: BASE: Übertrag eines Wertes zwischen zwei Tabellen

von Senekurios » Fr, 22.04.2016 14:17

Hallo Winfried,

danke für die Antwort. In der Datenbanktabelle ist der Wert für "ClientFee" als "Zahl [Numeric]" definiert.

Ich bin inzwischen durch Recherchieren und Probieren ein ganzes Stück weiter, aber leider noch nicht ganz fertig. Die WHILE Schleife zum Auslesen der Daten aus der Tabelle hat gefehlt. Es war dann gestern abend doch etwas zuviel :D

Jetzt habe ich "nur" noch das Problem, dass im Falle "Charge = 0" - In der Tabelle "Client Data" steht für "ClientFee" 0,00 drin - der Wert in der Tabelle Basic Data nicht aktualisiert wird, sondern der vorherige bestehen bleibt. Ist der Wert für "Charge" nur minimal größer als Null (z.b. 0,001), klappt es wie vorgesehen.
Gibt es dazu ggf. eine Lösungsidee?

Das Makro sieht nun so aus:

Code: Alles auswählen

SUB Update_Client_Charge 
DIM oDoc, oDrawpage, oForm, oResult, oFeld, oClient, oDatenquelle, oVerbindung, oSQL_Anweisung AS OBJECT
DIM stSQL AS STRING
DIM charge AS DOUBLE
DIM ID_Client AS LONG
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("Filter").getByName("Basic_Data")
oFeld = oForm.getByName("fmtID")
oClient = oForm.getByName("Selected by")
ID_Client = oClient.GetCurrentValue()
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
	oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()

' Read Client Fee from Client Data if a client is selected (List field!)
IF ID_Client > 0 THEN
  stSql = "SELECT ""ClientFee"" FROM ""Client Data"" WHERE ""ID_Client"" = '"+oClient.GetCurrentValue()+"'  "
  oResult = oSQL_Anweisung.executeQuery(stSql)
	WHILE oResult.next
		charge = oResult.getDouble(1)
	WEND
	ELSE
	charge = 0	
ENDIF
oForm.updatedouble(oForm.findcolumn("Client Charge"),charge) ' Insert Client Charge in Basic Data 

IF oForm.isNew THEN
oForm.insertRow()
ELSE
oForm.updateRow()
END IF

END SUB

Re: BASE: Übertrag eines Wertes zwischen zwei Tabellen

von komma4 » Fr, 22.04.2016 13:26

Senekurios hat geschrieben:gibt es einen Typenkonflikt.
Sage uns doch bitte mal wie die Tabellendefinition aussieht.
Du arbeitest im Code mit float und double Werten...

Und die Fehlermeldung zu sehen wäre auch nicht verkehrt

Re: BASE: Übertrag eines Wertes zwischen zwei Tabellen

von Senekurios » Fr, 22.04.2016 09:34

als Ergänzung hier noch der Screenshot, was die Abfrage in SQL als Ergenbis bringt, für den Fall dass die ID_Client = 2 ist.
Dateianhänge
Unbenannt.jpg
Unbenannt.jpg (18.7 KiB) 3209 mal betrachtet

BASE: Übertrag eines Wertes zwischen zwei Tabellen

von Senekurios » Do, 21.04.2016 22:11

Hallo,

ich habe mir anhand des Handbuchs ein Makro gebaut, das einen Wert aus einer Tabelle "Client Data" ausliest und diesen in eine Tabelle "Basic Data" schreiben soll, wenn der "Client", welcher in einem Listenfeld verknüpft ist, verändert wird. Das Makro ist an das Listenfeld gebunden und wird mit dem Ereignis "Nach dem Aktualisieren" ausgeführt.

Code: Alles auswählen

SUB Update_Client_Charge 
DIM oDoc, oDrawpage, oForm, oFeld, oClient, oResult, oDatenquelle, oVerbindung, oSQL_Anweisung AS OBJECT
DIM stSQL AS STRING
DIM charge AS Double

oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("Filter").getByName("Basic_Data")
oFeld = oForm.getByName("fmtID")
oClient = oForm.getByName("Selected by")
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
	oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()

' Read Client Fee from Client Data if a client is selected (List field!)
stSql = "SELECT ""ClientFee"" FROM ""Client Data"" WHERE ""ID_Client"" = '"+oClient.GetCurrentValue()+"'  "
oResult = oSQL_Anweisung.executeQuery(stSql)
charge = oResult.getdouble()
oForm.updateFloat(oForm.findcolumn("Client Charge"),charge) ' Insert Client Charge in Basic Data 

IF oForm.isNew THEN
oForm.insertRow()
ELSE
oForm.updateRow()
END IF
END SUB
Meine Tests ergeben, dass alles bis auf einen Punkt funktioniert. Wenn ich für "Charge" einen festen Wert eingebe, wird der Datensatz wie gewünscht aktualisiert. Will ich das Ergebnis der SQL-Abfrage verwenden, gibt es einen Typenkonflikt.

Ich habe auch schon versucht, das Zellenupdate mit dem SQL-Befehl "update" durchzuführen. Leider ohne Erfolg.

Wie kann ich diesen Typenkonflikt umgehen?

Gruß
Marko


Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst

Nach oben