GELÖST Formularaufruf mit SQL Datensatzauswahl

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

GELÖST Formularaufruf mit SQL Datensatzauswahl

Beitrag von WSO »

Ich versuche ein Formular mit einembestimmten vorher ausgewaehltem Datensatz aufzurufen.
Habe mich an einemBeispiel hier aus dem Foum orientiert und nicht die Filterfunktion sondern eine SQL-Abfrage verwendet.

Die Feldnamen im SQL-Statement entsprechen denen der BASE-Tabelle.

Beim Aufruf des Makros oeffnet sich ein neues window zur Parameterabfrage (kud_id).
Die msgbox zeigt den SQL-Befehl noch mit Fragezeichen (.... kud_id=?)
Ist der Set-Befehl falsch?

Wenn ich in die Abfrage einen gueltigen Wert als kud_id eintragen kommt zwar keine Parameterabfrage, das Bearbeitungsformiular (FORMkunde) wird aber nicht geoeffnet.

Waere dankbar fuer nen Tip, stehe auf dem Schlauch.

Code: Alles auswählen

SUB KundeOpenForm

 	DIM oDoc AS OBJECT
  	DIM oDrawpage AS OBJECT
 	Dim oForm As Object
   	Dim oNewForm As Object
  	Dim oFeld As Object
  
  	Dim stFilter As String

  ' Formlarfeld holen
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
  	oForm = ThisComponent.Drawpage.Forms.getByName("FORMAuswahlKunde")
  	oFeld=oForm.getByName("Textfeld")  	
 	
 	stFilter = oFeld.Text 
  
 	msgbox (stFilter)
 	
 ' soweit ok
 ' Zugriff testweise ueber Primaerschluessel (kud-id)
 	
   oNewForm = oDoc.Drawpage.Forms("FORMkunde") 
   oNewForm.Command = "SELECT * FROM ""tKunde"" WHERE ""kud_id"" = ?"
  
   oNewForm.CommandType = 2
   oNewForm.setInt(1,2)
   
      msgbox (oNewForm.Command)
   
   oNewForm.execute	
   oNewForm.reload		
 	
 
end sub


Moderation:
Zur Darstellung von Programmcode sind in der Forums-Software die [​code]…[​/code] Tags vorgesehen. Diese habe ich noch mal für dich gesetzt. Zukünftig bitte selbst dran denken.
lorbass, Moderator
Zuletzt geändert von WSO am Mo, 14.07.2014 23:41, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formularaufruf mit SQL Datensatzauswahl

Beitrag von RobertG »

Hallo WSO,

warum suchst Du so einen komplizierten Weg? oForm.Filter tut doch genau das, was Du haben möchtest.

Code: Alles auswählen

    SUB KundeOpenForm
        DIM oDoc AS OBJECT
         DIM oDrawpage AS OBJECT
        Dim oForm As Object
          Dim oNewForm As Object
         Dim oFeld As Object     
         Dim stFilter As String
      ' Formlarfeld holen
       oDoc=thisComponent
       oDrawpage=oDoc.Drawpage
         oForm = ThisComponent.Drawpage.Forms.getByName("FORMAuswahlKunde")
         oFeld=oForm.getByName("Textfeld")   
        stFilter = oFeld.Text
       oNewForm = oDoc.Drawpage.Forms("FORMkunde")
       oNewForm.Filter = """kud_id""= "+stFilter+""
       oNewForm.reload   
    end sub
Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Formularaufruf mit SQL Datensatzauswahl

Beitrag von WSO »

HalloRobert,
danke dafuer, einfacher und geht einwandfrei.

Ich moechte das jetzt umbauen fuer den Aufruf eines markierten Satzes in einem Unterformular:
Hauptformular:t fKunde,enthaltenes Unterformular: FKundeAuftrag (tabellarisches Formularformat).
Der Zugriff soll ueber den Primaerschluessel der Tabelle tAuftrag (auf_id) erfolgen.

Dazu zwei Fragen:

1) Wie greife ich auf ein bestimmtes Feld der markierten Zeile des Unterformulars zu?
2) Wie lautet die Anweisung fuer die Zuweisung in "stFilter", wenn das Datenformat integer ist?
xxxx=oFeld.text kann nicht gehen, = oFeld.integer geht aber auch nicht.
Die richtige Syntax ist bstimmt dokumentiert, in dem Kapitel zu Makros konnte ich nichts finden.
Wuerde mir gerne ein Base Referenhandbuch runterladen,um nicht solche simplen Fragen hier einstellen zu muessen,aber wo?

Gruss,
Wolfram
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formularaufruf mit SQL Datensatzauswahl

Beitrag von RobertG »

Hallo Wolfram,

wenn Du viel mit Makros arbeiten möchtest - und danach sieht das aus - dann lade Dir ein Werkzeug wie xray runter: http://bernard.marcelly.perso.sfr.fr/index2.html
Damit kannst Du allen möglichen Elementen auf den Grund gehen.

Mit oFeld.text liest Du das aus, was angezeigt wird. Teste das doch einfach einmal mit einem Integer-Feld und einer msgbox. Du wirst auch bei einem Integer-Feld entsprechend einen Wert erhalten. Wenn Du ein Währungsfeld hast, dann wird oFeld.text das Ganze mit € ausgeben - auch bei anderen formatierten Feldern.
Ansonsten kannst Du die tatsächlichen Werte auch per oFeld.getCurrentValue() erfragen. Bei Listenfeldern liefert das dann ab LO 4.1 allerdings wirklich den Wert, der in der Tabelle gespeichert wird - also nicht die Anzeige sondern in der Regel den Fremdschlüssel.

Die markierte Zeile im Unterformular ist die aktuelle Zeile. Wenn Du da z.B. ein Tabellenkontrollfeld hast (nehme ich an, da Du die Zeile siehst):

Code: Alles auswählen

oDoc=thisComponent
oDrawpage=oDoc.Drawpage
oForm = ThisComponent.Drawpage.Forms.getByName("Hauptformular").getByName("Unterformular")
oFeld = oForm.getByName("Tabellenkontrollfeld").getByName("Feld_im_Tabellenkontrollfeld")
Manche Funktionen erreichst Du auch besser über den Index, vor allem in Tabellenkontrollfeldern hatte ich da früher auch mal Probleme. Kann mich aber nicht mehr daran entsinnen, was das nun war. Also dann:

Code: Alles auswählen

oFeld = oForm.getByName("Tabellenkontrollfeld").getByIndex(Nummer des Feldes)
Gruß

Robert
Antworten