BASE: IF..Then..Else

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Poller
Beiträge: 6
Registriert: Do, 07.09.2017 07:27

BASE: IF..Then..Else

Beitrag von Poller »

Hallo .....

habe folgendes Makro erstellt:

Code: Alles auswählen

SUB AUTO_BEZAHLT
	Dim sText As String, sSQL As String
   	Dim oStatement As Object, oReportDoc As Object, oVerbindung As Object
  	Dim Args(1) As New com.sun.star.beans.PropertyValue
	Dim oDataBaseContext As Object, oDataSource As Object
           	oDataBaseContext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
	oDataSource = oDataBaseContext.getByName( "DATENBANK" )
   Dim oDoc as Object, oDrawpage as Object, oSubForm1 as Object, oDocCtl as Object, oDraw as Object, oSubForm as Object
   Dim oFeld as Object
   Dim la as String
        oDoc = ThisComponent
        oDrawpage = oDoc.drawpage
        oForm = oDrawpage.forms.getByName ("KRG")
        oSubForm  =  oForm.getByName("ZAHLART")
        oSubForm1 =  oForm.getByName("BEZAHLT_STEUERUNG")
        oDocCtl = oDoc.getCurrentController()
  		oDraw = oDoc.drawpage
 		oForm = oDoc.drawpage.forms(0)
 		la	 =  oForm.getByName("ZAHLART").text
 		
 		IF la LIKE "B Barzahlung *" THEN
 	
 	   Dim a as string
       a = Date()
       oDoc = ThisComponent
       oDocView = oDoc.getCurrentController()
       oForm = oDoc.drawpage.forms(0)
       oFeld = oForm.getByName("BEZAHLT")
       oDocView.getControl(oFeld).setFocus()
       oDocView.getControl(oFeld).text = cDate (a)
       oDocView.getControl(oFeld).date = CDateToISO( Date )
       ofeld.commit() 
bis hierhin funktioniert das Makro einwandfrei
hier soll jetzt das Datumsfeld bei Nichterfüllung des Kriterioums leer bleiben (auch kein Problem ! )
ABER: Ist bereits ein Bezahlt-Datum abgespeichert, soll dieses bei Nichtzutreffen der Bedingung durch ein leeres Datumsfeld ersetzt werden.

Habe das auch schon mit einer Hilfstabelle ("BEZAHLT_STEUERUNG") mit ID und "leerem" Datum in einer SQL-Anweisung probiert:

Code: Alles auswählen

oDataBaseContext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
    	oDataSource = oDataBaseContext.getByName( "Datenbank" )
    	oVerbindung = oDataSource.getConnection( "" , "" )
    	oStatement = oVerbindung.createStatement
    	sSQL = "UPDATE ""Datenbank"" SET ""BEZAHLT"" =  SELECT ""BEZAHLT"" FROM ""BEZAHLT_STEUERUNG"" WHERE ""Datenbank"".""ID""= 
       ""BEZAHLT_STEUERUNG"".""ID"""
    	oStatement.executeUpdate( sSQL )
Aber: SQL-Befehl ignoriert die "Where-Anweisung" und löscht ALLE BEZAHLT-Einträge

Bitte um Hilfe...Danke, Poller

Hoffe, ich habe mich verständlich ausgedrückt, arbeite mit OO4.1 u. Windows 10


Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; CODE tags gesetzt
Zuletzt geändert von Poller am Mi, 22.11.2017 03:54, insgesamt 1-mal geändert.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: BASE: IF..Then..Else

Beitrag von Toxitom »

Hey Poller,

also wenn Du den Code nicht neu hier rein geschrieben hast sondern mit Copy&Paste gearbeitet hast, dann hast Du ein Anführungszeichen zu viel Beu:
sSQL = "UPDATE ""KRG"" SET ""BEZAHLT"" = SELECT ""BEZAHLT"" FROM """BEZAHLT_
nach dem FROM stehen drei doppelte... eins zu viel.

Andererseits fehlt am Ende ein doppeltes. Prüfe solche SQL Befehle unbedingt vorher mal mit ner MsgBox....

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten