Seite 1 von 3

Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 17:42
von oropax
Hallo zusammen,

Ich habe eine Frage zur Generierung einer neuen Variable aus bereits bestehenden Variablen.
Zum Beispiel: Für jede Beobachtung wurde die Variable Postleitzahl (PLZ: 4-stellig) sowie ein fortlaufend auto-generierter Wert (ID:1-999) erhoben. Falls möglich, wie kann ich aus diesen beiden Variablen eine neue Variable (PID: 7-stellig) generieren? Die ersten vier Stellen dieser neuen Variable soll die Postleitzahl bilden, während sich die drei letzten Stellen aus dem auto-generierten Wert (ID) zusammensetzen.

Herzlichen Dank für eure Hilfe.

Re: Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 17:58
von eBayer
Sub VariableBasteln
a = 1234
b = 1
MsgBox str(a) + Format(b, "000")
End Sub

Passt das so?
Gruß eBayer

Re: Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 18:14
von oropax
Hallo eBayer,

Ich benutze das Programm zum ersten Mal, deshalb reicht Wissen nicht sehr weit...

Soweit ich das beurteilen kann müsste ich also ein Makro programmieren. Allerdings weiss ich nicht, wie ich dieses anschliessend in meine Tabelle integrieren kann, damit die Variable auch wirklich generiert wird. Kannst du mir diesbezüglich auch weiterhelfen?

Re: Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 18:22
von turtle47
Hallo,

hier findest Du Links zum Installieren von Makros.

Viel Erfolg.

Jürgen

Re: Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 18:29
von eBayer
dazu müsstest Du schon etwas mehr Information herauslassen.

Ich gehe davon aus, daß Du aus welchen Gründen auch immer, 2 Datenfelder aus einer Tabelle zusammenbasteln willst.
Das ist der Weg:
Feld a = 1234
Feld b = 1
Feld c = str(a) + Format(b, "000")
c sieht dann im Ergebnis so aus: 1234001
Du wirst ja irgendwo in Deinem Programm die notwendige Logik programmiert haben oder noch programmieren müssen.
Ob das ein Makro nur zum zusammenbasteln ist, oder ob das ein Teil der gesamten Logik ist, mußt Du selbst entscheiden.
Ein gewisses Maß an Selbststudium ist absolut unumgänglich. Sonst kannst Du das Programm gleich von jemand für Dich basteln lassen. Also trau Dich einfach mal heran, definiere Deine Tabellen und fülle diese erst einmal manuell mit ein - zwei Datensätzen. Dann entwirfst Du das von Dir angedachte Formular. Und darin mußt Du nun ein wenig Logik programmieren.
Viel Spaß und nur Mut
Gruss eBayer

Re: Generierung neuer Variablen

Verfasst: Mo, 30.03.2009 22:56
von oropax
Ok, ich versuchs mal. danke für die Hilfe.

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 12:21
von oropax
Es will immer noch nicht funktionieren, deshalb richte ich mich nocheimal an all die kompetenten User im Forum...

Nocheinmal zum Befehl: ich möchte die Variablen aid (5stellig) und cid (3stellig) zur variable cidaid zusammensetzen.

Wäre das die korrekte Umsetzung, gemäss Vorschlag von eBayer?

Sub cidid
cidid= str(aid) + Format(cid, "00000")
End Sub

Die Sache ist, dass ich an einem für mich einmaligen Projekt mitarbeite. Dabei dient uns dieses Programm nur als Tool für die eigentliche Arbeit. Bis auf die Sache mit dieser mühsamen Variablengenerierung wäre soweit alles in Ordnung. Das Erlernen der Programmiersprache für diesen einen Befehl scheint mir daher doch ein wenig umständlich...

Vielleicht noch zur Einbindung des Makros: Das Makro wird nun jedes Mal beim Laden des Formulars ausgeführt (Formulareigenschaften --> Ereignisse). Ist das der richtige Weg?

Also entweder hapert es an der Einbindung des Makros, am Makrobefehl oder an beidem, die Werte für die Variable cidid werden auf jeden Fall nicht generiert.

Wenn mir jemand weiterhelfen könnte wäre ich sehr froh.

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 13:23
von turtle47
oropax hat geschrieben:ich möchte die Variablen aid (5stellig) und cid (3stellig) zur variable cidaid zusammensetzen.
Stellt sich die Frage wo kommen die Variablen her?

Ich habe Dir mal einen Testcode zusammengestellt:

Code: Alles auswählen

'Global a, b as integer 'Variable verfügbar machen

Sub Sub1
neueVariable = str(a) & Format(b, "000")
msgbox neueVariable
a = "" 'Variable zurücksetzen
b = "" 'Variable zurücksetzen
End Sub

Sub Sub2 'Variable erzeugen
a = 1234
b = 1
End Sub
1. Versuch
Starte die Sub1, dann erhälst Du als Ergebnis "nichts" > Die MsgBox ist leer
Das ist auch richtig so

2. Versuch
Starte zuerst Sub2 und anschliessend die Sub1, dann erhälst Du als Ergebnis "nichts" > Die MsgBox ist leer
Das ist auch richtig so

3. Versuch
Entferne das Hochkomma vor "'Global a, b as integer" (aber nur das erste Hochkomma!!)
Starte Sub1
Als Ergebnis erhälst Du "000"
Das ist auch richtig so

4. Versuch
Starte zuerst Sub2 und anschliessend die Sub1
Als Ergebnis erhälst Du "1234001"
Das ist jetzt so wie es sein soll
Die Variablen sind gesetzt und global verfügbar

Hilft das weiter?

Im Klartext heisst das, Du muss die Variable(n) erstmal erzeugen und durch globalsetzen für andere Subs verfügbar machen!
oropax hat geschrieben:Vielleicht noch zur Einbindung des Makros: Das Makro wird nun jedes Mal beim Laden des Formulars ausgeführt (Formulareigenschaften --> Ereignisse). Ist das der richtige Weg?
Welches Makro?


Jürgen

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 13:39
von eBayer
kann es sein, daß du in einem verzeichnis arbeitest, welches die Ausführung von macros nicht zulässt?
ich habe dir mal ein testprogramm beigefügt.... probiers mal aus und schau dir den code an.
viel erfolg
eBayer

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 15:14
von oropax
@ ebayer

Vielen Dank für den Code: Einziges Problem ist, dass die neue Variable nur angzeigt aber nicht generiert wird! Ist es nicht möglich den neuen Wert, neben den Ausgangsvariablen "Feld1" und "ID" in der Tabelle zu speichern? Also so, dass wir am Ende 3 und nicht 2 Tabellenspalten haben?

Aufbau (@ turtle47)

Die Variablen kommen aus einer Tabelle. Die ganze Sache ist folgendermassen aufgebaut:

Zwei Tabellen: Zeitungsartikel und Forderung
Ein Formular (Zeitungsartikel) mit Subformular (Forderung)

Die Formulare sind über die Variable "aid" verknüpft, welche jeden Artikel eindeutig identifiziert. Allerdings können innerhalb eines Artikels verschiedene Forderungen formuliert werden. Diese Forderungen werden innerhalb eines Artikels durchnummeriert ("cid"). Nun möchte ich aus den beiden Variablen "aid" und "cid" eine neue Variable generieren, sagen wird "xid". Die Tabelle 'Forderung' sollte anschliessend mit diesen Werten ergänzt werden, damit jede Forderung eindeutig identifiziert werden kann.

Entschuldigt die ewigen Ausführungen und meine scheinbar lange Leitung...aber ich benutze das Programm erst seit letzter Woche. Die Basic-Syntax ist mir daher völlig unbekannt. Wäre eigentlich auch kein grosses Problem gewesen, wenn nicht diese doofe Variable zu generieren wäre. Und da ich in absehbarer Zeit nicht so schnell wieder mit Base arbeiten werde und die ganze Sache (bis anhin) nur an diesem Punkt scheitert, schien mir dieses Forum optimal...

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 18:05
von eBayer
Hallo Oropax,
bis hierhin schien mir die Hilfe notwändig......
Aber nun denke ich daß Du Dich mal selbst reinhängen solltest..... scheint ja Dein Job zu sein.
Es ist wirklich kein Problem, den Rest zu programmieren. Aber wenn Du das jetzt alles abschreibst und nicht bereit bist, Dich mit ooBase zu beschäftigen, frage ich Dich: "wie willst Du denn später mal bei aufkommenden Problemen reagieren?"
Also setze etwas Ehrgeiz hinein und beiß Dich durch..... ich habe immerhin mit 63 Jahren vor 3 Monaten spielerisch damit angefangen und bin inzwischen begeistert von ooBase......
Ist nur ein gut gemeinter Rat.
Viel Erfolg.... den willst Du doch, oder?
eBayer

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 20:40
von oropax
@ebayer

Irgendwie hast du schon recht: natürlich werde ich in Zukunft solche Probleme nicht selber lösen können, wenn ich mich nicht ein bisschen mehr reinhänge. Allerdings hat die Sache einen (bzw. zwei) Haken:

1. Wie erwähnt, werde ich Base in absehbarer zukunft nicht mehr benutzen müssen. Das momentane Projekt ist sozusagen eine einmalige Sache.

2. Ich habe weder die Unterlagen (noch die Zeit) mich gross mit der Programmierung in Basic auseinanderzusetzen. Ausserdem sehe ich trotz mehreren verschiedenen Herangehensweisen keine Möglichkeit die neu generierte Variable in der Tabelle zu speichern. Wäre halt schon super, wenn mir jemand diesen Befehl posten könnte...

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 22:20
von berndkli
Hallo Oropax

Ich glaube, Du hast die Leute hier mit dem Begriff "Variable" in die falsche Richtung gelenkt.
Wahrscheinlich brauchst Du ist eine Schlüsselspalte die sich aus 2 anderen Spalten zusammensetzt.
Sowas geht mit der Funktion CONCAT() in einer Abfrage. Um später einen eindeutigen Datensatz zu finden ist es auch nicht nötig, das der generierte Wert in die ursprüngliche Tabelle geschrieben wird (geht aber glaube ich mit INSERT() oder UPDATE(), aber da kenn' ich mich nicht aus), die Abfrage tut das erst mal.
Beispiel

Code: Alles auswählen

SELECT "Spalte1", "Spalte2","Spalte3", CONCAT("Spalte1",Spalte2")AS "Concat" FROM "Tabellenname"
Gruss Bernd

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 22:28
von eBayer
So, ich habe das Testprogramm in Deinem Sinne erweitert.
Einfach das beiliegende Programm in Dein Arbeitsverzeichnis für OO kopieren.
Dann in OO unter Extras - Optionen - OpenOffice.org - Datenbanken dieses Programm registrieren.
Nun kannst Du das Programm testen - inclusive Update.
Viel Erfolg
eBayer

Re: Generierung neuer Variablen

Verfasst: Di, 31.03.2009 23:50
von oropax
Vielen Dank für die ausführlichen Beiträge. Ich werde mir das morgen genauer anschauen und hoffe, dass ich es so schaffen werde! Auf jeden Fall ein grosses Dankeschön für eure engagierte Hilfe.