🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Makro-Variable trägt Werte nicht in Tabelle ein

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

[gelöst] Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von Acco » Do 6. Mär 2014, 21:09

Guten Abend liebe Helfende,

ich komme nicht weiter bei einem Makro, ein Variablenwert wird nicht in die gewünschte Tabelle eingetragen. Ich habe meine Kenntnisse ausgeschöpft und bin jetzt ratlos.

Betroffen ist das Formular "Ein_TeilnZuKurs", dort erfolgt die Zuordnung von Teilnehmern zu einem Kurs.

Die betreffende Variable im Makro heißt "sK_ID", sie soll eine Kurs-ID in die Tabelle "KursBelegung" eintragen. Macht sie aber nicht. Verschiedene Möglichkeiten bei der Definition (String, Integer) sind ausprobiert und führen nicht zum Erfolg.

In der While-Schleife soll der Eintrag erfolgen, da habe ich auch verschiedene Variationen mit Hochkommata versucht, ohne Erfolg. Es kommt auch keine Fehlermeldung.

Mit xray habe ich den update-String ausgelesen und kopiert, füge ich ihn bei EXTRAS -SQL ein, funktioniert der Eintrag problemlos. Hier das Makro und eine verfremdete Beispiel-DB.

Code: Alles auswählen

' ausgewählte Teilnehmer in Tabelle "KursBelegung" eintragen

Sub Teilnehmer_eintragen

	DIM oDocView as Object
	DIM oDoc as Object 
	DIM oForm as Object
	DIM oForm_Grid as Object
	DIM oSubForm as Object
	DIM oSubForm_Grid as Object
	DIM oKursteilnehmerForm as Object
	DIM oDatenquelle AS OBJECT
	DIM oVerbindung AS OBJECT
	DIM oStatement AS OBJECT
	Dim sK_ID As Variant ' war auch schon Integer und String, ändert nichts
	Dim sT_ID As Variant
	Dim sSQL_anzNamen As String
	Dim sSQL_insT_ID As String

    oDoc = ThisComponent
 	oForm = oDoc.DrawPage.Forms.getByName("MainForm")
	oForm_Grid = oForm.getByName("MainForm_Grid")
	oSubForm = oForm.getByName("SubForm")
	oSubForm_Grid = oSubForm.getByName("SubForm_Grid")
	
	sK_ID = oForm_Grid.getByName("Kurs_ID").currentValue
	
'xray sK_ID
	
' Datenbankverbindung erstellen
	oDatenquelle = ThisComponent.Parent.DataSource
	oVerbindung = oDatenquelle.GetConnection("","")
	oStatement = oVerbindung.createStatement	
		
' SQL-Abfrage mit Teilnehmer-Nummern zusammenstellen
	sSQL_anzNamen = "SELECT (""T_ID"") FROM ""Teilnehmer"" WHERE ""Auswahl"" = " +  TRUE
	
' Abfrage ausführen
	oResultSet = oStatement.executeQuery(sSQL_anzNamen)

	While oResultSet.next()
		'T_ID aus oResultSet holen
		sT_ID = oResultSet.getString(1)
		
'xray sT_ID

		' "T_ID" in Tabelle "KursBelegung" einfügen (funktioniert, wird eingetragen)
		sSQL_insT_ID ="INSERT INTO ""KursBelegung"" (""T_ID"") " +chr(13)+_
				      "VALUES  ('" + sT_ID + "')"  
		' "K_ID" in Tabelle "KursBelegung" einfügen (funktioniert nicht)
		' die Variablen waren auch schon beide in Hochkommata, beide ohne, nutzte auch nichts		      
		SQL_updK_ID = "UPDATE ""KursBelegung"" SET ""K_ID"" = " + sK_ID + " WHERE ""T_ID"" = '" + sT_ID + "'" 
				  
		SQL_Anweisung = oVerbindung.createStatement()
		' Tabelle KursBelegung mit T_ID füllen
		SQL_Anweisung.executeUpdate(sSQL_insT_ID)
		
'xray SQL_updK_ID '(wenn ich den von xray hier gezeigten String kopiere und  
' 				   in "Extras - SQL" ausführen lasse, funktioniert es)	

		' Tabelle KursBelegung updaten mit K_ID 			
		SQL_Anweisung.executeUpdate(sSQL_updK_ID)	
	Wend	
		
End Sub
Ich bin sehr dankbar, wenn mir jemand auf die Sprünge hilft.

Schönen Abend

acco
Dateianhänge
Kurse_Test.zip
.zip in .odb ändern
(33.61 KiB) 293-mal heruntergeladen
Zuletzt geändert von Acco am Fr 7. Mär 2014, 11:49, insgesamt 1-mal geändert.
openSUSE Tumbleweed - LibreOffice 24.8.2.1

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von RobertG » Do 6. Mär 2014, 22:21

Hallo Acco,

ich habe jetzt nicht mehr die Zeit, da intensiv nachzusehen. Folgendes fällt mir spontan auf:

sSQL_anzNamen = "SELECT (""T_ID"") FROM ""Teilnehmer"" WHERE ""Auswahl"" = " + TRUE
Das TRUE steht nicht in dem SQL-Code. Lass Dir einmal Deinen SQL-Code über
msgbox sSql_anzNamen
anzeigen.
sSQL_anzNamen = "SELECT (""T_ID"") FROM ""Teilnehmer"" WHERE ""Auswahl"" = TRUE "
kann da vielleicht eher zum Ziel führen. Auch eine 1 würde es wohl tun.

sT_ID = oResultSet.getString(1)
Ist die ID tatsächlich eine Zeichenkette (Varchar) oder doch eine Zahl (Int)?

SQL_Anweisung.executeUpdate(sSQL_updK_ID)
Du benutzt hier die gleiche Variable wie vorher. Jetzt nicht getestet, aber vielleicht ein Weg:
SQL_Anweisung1 = oVerbindung.createStatement()
SQL_Anweisung1.executeUpdate(sSQL_updK_ID)

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von Acco » Fr 7. Mär 2014, 02:22

Hallo Robert,

vielen Dank für Deine schnelle Antwort.
Ich reiche noch nach: OpenSUSE 13.1 und LibreOffice 4.1.4.2 , die Datenbank ist eingebettet.
RobertG hat geschrieben:sSQL_anzNamen = "SELECT (""T_ID"") FROM ""Teilnehmer"" WHERE ""Auswahl"" = " + TRUE

Das funktioniert, genauso wie Dein Vorschlag das "TRUE" in den SQL-Code zu schreiben.
RobertG hat geschrieben:Du benutzt hier die gleiche Variable wie vorher. Jetzt nicht getestet, aber vielleicht ein Weg:
SQL_Anweisung1 = oVerbindung.createStatement()
SQL_Anweisung1.executeUpdate(sSQL_updK_ID)
Das funktioniert bedauerlicherweise auch nicht.

Ich habe die beiden Variablen in String-, Integer-, Long- und Variant-Variablen umgewandelt, auch das führt nicht zum gewünschten Ergebnis. Irgendetwas - wahrscheinlich was einfaches - übersehe ich die ganze Zeit. Ich finde bloß noch nicht raus was.

Danke für Deine Hilfe und einen gelungenen Tag

acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von F3K Total » Fr 7. Mär 2014, 08:18

Hi,
ohne Test schätze ich

Code: Alles auswählen

SQL_Anweisung = oVerbindung.createStatement()
darf nicht in die Schleife (While/Wend)
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von Acco » Fr 7. Mär 2014, 11:48

Guten Tag F3K Total,

Danke für den Tipp, daran liegt es jedoch nicht. Das funktioniert.

Meine "Blindheit" war die Ursache.

Bei der Variablen "sSQL_updK_ID" habe ich in der While-Schleife bei "sSQL_updK_ID" das kleine "s" vergessen. In der "SQL_Anweisung.executeUpdate(sSQL_updK_ID)" ist es enthalten, das ist mir nicht aufgefallen. Unter EXTRAS - SQL funktioniert es, denn da wird ja nur die Update-Syntax eingegeben, nicht der Variablenname.

Tut mir leid, Dich und Robert unnötig beschäftigt zu haben, bitte entschuldigt. (Ich bin versucht, das "Schäm-Icon" eizusetzen und ich mag diese Icons nicht.)

Sonnige Grüße

acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: [gelöst] Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von F3K Total » Fr 7. Mär 2014, 16:41

... auch wenn es funktioniert, es gehört nicht in die Schleife.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: [gelöst] Makro-Variable trägt Werte nicht in Tabelle ein

Beitrag von Acco » Fr 7. Mär 2014, 17:26

... da hast Du recht. Jedoch war das nicht Auslöser des Fehlers.

Schönen Abend

acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten