[Gelöst] Mehrere Datensätze in Formular einfügen (Makro)

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: [Gelöst] Mehrere Datensätze in Formular einfügen (Makro)

Re: [Gelöst] Mehrere Datensätze in Formular einfügen (Makro)

von paradigma » Di, 19.04.2011 21:37

Hallo R

Das ist wirklich sehr nett, dass du mir diese auch noch lieferst. Werde auch die Seite mit der Syntax bei Gelegenheit noch etwas genauer anschauen, daran scheitere ich nämlich nach wie vor öfters.

Hoffe, dass ich mich mal revanchieren kann, auch wenn die Wahrscheinlichkeit wohl eher klein ist :)

Gruss
paradigma

Re: Mehrere Datensätze in Formular einfügen (Makro)

von F3K Total » So, 17.04.2011 08:19

Hallo Paradigma,
freut mich, wenns klappt :)
Das [gelöst] trägst Du selbst ein, dazu einfach den Thread aufrufen und auf "ändern", dann die Titelzeile anpassen.

hier noch einige Tips:
1.) Wenn Du das Makro aus einem Formular heraus starten willst, kannst Du die Verbindung zur Datenbank auch so einrichten:

Code: Alles auswählen

	oDoc = thisComponent
	oForm = oDoc.DrawPage.Forms(0)' hier das entsprechende Formular angeben
	Verbindung = oForm.ActiveConnection
	If isNull(Verbindung ) Then Exit Sub
	SQL_Anweisung = Verbindung.createStatement
2.) Wenn Du mehrere aus Basic generierte (berechnete) Zeilen in die DB schreiben willst, kannst Du das z.B über eine Schleife wie
"for/next", "do loop" oder "While/wend" erreichen.
Beispiel:

Code: Alles auswählen

for i=1 to x
sql="INSERT INTO ZIELTABELLE (Spalte1,Spalte2,Spalte3) Values (Quellwert1(i), Quellwert2(i), Quellwert3(i))
SQL_Anweisung.executeUpdate(Sql)
next i
3.) Dabei solltest Du besonders auf die Syntax achten: viewtopic.php?f=8&t=47595, denn Strings müssen z.B in
einfache Gänsefüßchen eingerahmt werden, Zahlen nicht, also z.B. sei
Quellwert1(i) ein String
Quellwert2(i) eine Interger Variable
Quellwert3(i) ein String

Code: Alles auswählen

sql ="INSERT INTO ZIELTABELLE( Spalte1,Spalte2,Spalte3) VALUES ('"+Quellwert1(i)+"',"+Quellwert2(i)+",'"+Quellwert3(i)+"')"
Gruß R

Re: Mehrere Datensätze in Formular einfügen (Makro)

von paradigma » So, 17.04.2011 03:19

Hallo R

Absolut genial! Diese Methode eröffnet mir jede Menge neue Möglichkeiten betreffend Datenerfassungs-Automatisierung.

Vielen Dank für deine sehr konkrete Lösung.

gruss
paradigma


PS: Muss ich den Beitrage selbst als gelöst bezeichnen oder wird das durch einen Administrator gemacht?

Re: Mehrere Datensätze in Formular einfügen (Makro)

von F3K Total » Sa, 16.04.2011 15:55

Das ist nicht so schwer, ein Beispiel:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatabaseContext.getByName(StarDesktop.CurrentComponent.getLocation())
Verbindung = Datenquelle.GetConnection("","")' ("Benutzername","Passwort")
SQL_Anweisung = Verbindung.createStatement()

Sql = "INSERT INTO "Zieltabelle" (PilotID, Nachname, Vorname) SELECT DISTINCT ""StrtNr"",""Name"", ""Vorname"" FROM ""Quelltabelle"" Where ..."
SQL_Anweisung.executeUpdate(Sql)
"FROM ""Quelltabelle"" Where ..." kann eine beliebige Abfrage sein

Gruß R

Re: Mehrere Datensätze in Formular einfügen (Makro)

von paradigma » Sa, 16.04.2011 14:17

Hallo Winfried

Besten Dank für die rasche Antwort und die nette Begrüssung. Ich habe mich zwar erst gestern angemeldet, bin aber seit 2 – 3 Jahren ein regelmässiger Besucher und konnte mit Hilfe bestehender Beiträge schon sehr viele Probleme lösen und Durchbrüche erreichen. Auch dein Name habe ich schon öfters auf nutzbringenden Beiträgen gesehen. Dafür erst einmal ein grosses Kompliment von meiner Seite.

Doch nun zum Thema:
Winfried hat geschrieben:Da bin ich mir nicht sicher!
Ich auch nicht mehr.
Winfried hat geschrieben:Ein Formular ist IMHO an einen Datensatz gebunden.
IMHO verstehe ich leider nicht. Allerdings habe ich inzwischen hingebracht, was ich möchte, nur ist mir das viel zu handgestrickt. Indem ich das oben aufgeführte Makro einfach wiederhole, in der ersten Abfrage noch LIMIT 1 OFFSET 0 und in der 2. Abfrage noch LIMIT 1 OFFSET 1 setze, werden 2 Datensätze ins Subform geschrieben.

Möglicherweise bestätigt das aber auch deine Aussage, da in diesem Fall natürlich jeweils separat auf einen einzelnen Datensatz zurückgegriffen wird.
Winfried hat geschrieben:Warum willst Du die Daten überhaupt über ein Formular eintragen? Schreibe sie in die Datenbank und lasse sie Dir dann anzeigen.
Diesen Ansatz habe ich von Anfang an verfolgt, nur bin ich dabei nicht weitergekommen, ausser über den SQL Befehl „Insert Into“, aber auch dort habe ich das Problem, dass nur ein Datensatz neu erstellt wird, Zudem habe ich diese Lösung in einem anderen Fall verwendet (wo nur eine Tabelle betroffen ist)

Bei einem Lösungsansatz direkt in die Tabelle müsste ich nämlich noch die Beziehung zur übergeordneten Tabelle berücksichtigen. Denn die dem Subform zugrunde liegende Tabelle hat noch eine weitere Spalte, die sogenannte „TagesNr“. Bei einem manuellen Eintrag ins ZielSubformular oder beim obigen Makro wird diese Spalte automatisch über die Verbindung zum MainForm ausgefüllt. Aber das würde ich dann wohl irgendwie hinkriegen, wenn ich erst einmal eine Methode hätte, wie ich per Makro mehrere Datensätze in eine Tabelle einfügen kann.

Im Buch von Thomas Krumbein ist noch ein Ansatz über das ResultSet erläutert. Das habe ich aber noch nicht wirklich studiert, weil ich den Eindruck habe, das das eher zum ändern von Daten geeignet ist. Möglicherweise liege ich dabei aber falsch.

Fazit: Wenn du also einen konkreten Ansatz hättest, wie ich mehrere Datensätze direkt in eine Tabelle schreibe, wäre mir das sehr willkommen.

Gruss
paradigma

Re: Mehrere Datensätze in Formular einfügen (Makro)

von komma4 » Fr, 15.04.2011 15:38

Willkommen im Forum.
paradigma hat geschrieben: denn ich bin mir sicher, dass das irgendwie gehen muss.
Da bin ich mir nicht sicher!


Ein Formular ist IMHO an einen Datensatz gebunden.


Warum willst Du die Daten überhaupt über ein Formular eintragen? Schreibe sie in die Datenbank und lasse sie Dir dann anzeigen.

[Gelöst] Mehrere Datensätze in Formular einfügen (Makro)

von paradigma » Fr, 15.04.2011 11:02

Liebe Leute

Möchte mehrere Datensätze aus einer Abfrage per Befehlsschaltfläche in ein am Bildschirm geöffneten Formular einfügen. Mit dem unten aufgeführten Code funktioniert das einfügen grundsätzlich, allerdings wird jeweils nur ein Datensatz eingefügt (der letzte), auch wenn in der Quellabfrage mehrere Datensätze selektiert wurden.

Ich nehme an, dass mir beim Einfügen eine Schlaufe fehlt, im Sinne von DO WHILE xxx.next .........loop (ähnlich wie im 1. Teil), komme aber im Moment nicht weiter und hoffe, dass mir hier jemand den entscheidenden Tipp geben kann, denn ich bin mir sicher, dass das irgendwie gehen muss.

Code: Alles auswählen

sub AutoFerien
  
dim oQuellTabelle As Object, oZielForm As Object, oFormTabelle As Object, oStatement As Object, oZielSubForm As Object, ctl1 As Object, ctl2 As Object, s As string, sSql As string, x As Long, y As Long

GlobalScope.BasicLibraries.LoadLibrary("XrayTool")  ' 
	
oStatement = getCon().createStatement()


'1. Teil: Hier werden die Daten pro Spalte aus der Abfrage geholt (Dieser Teil funktioniert genau, wie ich möchte ********************************************************************************************************************************************

sSql = "SELECT ""fldVorgabeZeitartNr"", ""fldVorgabeVon"", ""fldVorgabeBis"", ""fldZeitArt"" FROM ""tblEinstellungen"", ""tblZeitArt"" WHERE "	"tblEinstellungen"".""fldVorgabeZeitartNr"" = ""tblZeitArt"".""fldZeitArtNr"""
	oErgSet = oStatement.executeQuery(sSql)
'	xray oErgSet
	
                If Not IsNull(oErgSet) Then
	Do While oErgSet.Next()
	Zeitart = oErgSet.getShort(1)
'	xray Zeitart
	VonZeit = oErgSet.getTime(2)
'	xray VonZeit
	BisZeit = oErgSet.getTime(3)
'	xray BisZeit
	
    loop
	End If

' 2. Teil: Hier sollten die Daten aus dem 1. Teil ins das Formular (genau genommen ist es ein SubFormular) einfgefügt weden. Das Problem ist, dass jeweils nur der letzte Datensatz eingefügt wird, anstatt alle. Hier fehlt wohl noch eine Schlaufe, weiss aber nicht, wie ich diese korrekt erstelle.

 '   oZielForm = ThisComponent.DrawPage.Forms.GetByname("MainFormZeiterfassung")
    oZielSubForm = oZielForm.GetByname("SubFormVonBis")
'    xray oZielSubForm
  
    oZielSubForm.moveToInsertRow
    oZielSubForm.updateShort(4, Zeitart)
    oZielSubForm.updateTime(2, VonZeit)
    oZielSubForm.updateTime(3, BisZeit)
    
    oZielSubForm.InsertRow
  
end sub
Für entscheidende Hiweise wäre ich sehr dankbar.

Gruss
paradigma

Nach oben