FormularProgrammierung_Anfägerhilfe
Moderator: Moderatoren
FormularProgrammierung_Anfägerhilfe
Hallo liebe Pro´s,
bitte helft einem Blutigen Anfänger wie mir!
Ich habe eine Datenbank vorbereitet die aus mehreren Tabellen besteht. (siehe Anhang)
jetzt möchte ich gern Formulare erstellen,damit meine Kollegen die noch weniger Ahnung haben als ich auch damit umgehen können.
Leider bin ich in basic nicht bewandert und kann daher mit Makroprogrammierung nicht dienen.
Und die TestDB´s die ich hier schon runter geladen habe, waren leider etwas zu schwierig zu verstehen, als das ich aus ihnen nach programmieren könnte.
Die genaue Problematiken sind im vorbereiteten DB Formular "Auftragsberbeitung" erklärt, Ich bin über jede Hilfe dankbar!!
bitte helft einem Blutigen Anfänger wie mir!
Ich habe eine Datenbank vorbereitet die aus mehreren Tabellen besteht. (siehe Anhang)
jetzt möchte ich gern Formulare erstellen,damit meine Kollegen die noch weniger Ahnung haben als ich auch damit umgehen können.
Leider bin ich in basic nicht bewandert und kann daher mit Makroprogrammierung nicht dienen.
Und die TestDB´s die ich hier schon runter geladen habe, waren leider etwas zu schwierig zu verstehen, als das ich aus ihnen nach programmieren könnte.
Die genaue Problematiken sind im vorbereiteten DB Formular "Auftragsberbeitung" erklärt, Ich bin über jede Hilfe dankbar!!
- Dateianhänge
-
- TestDB_Auftragsbearbeitung.odb
- TestDB_Auftragsbearbeitung
- (90.25 KiB) 100-mal heruntergeladen
Re: FormularProgrammierung_Anfägerhilfe
Durch die handbücher, das forum und die TestDB´s aus dem Forum habe ich mich schon durch gekramt, aber die haben mir einfach nicht weiter geholfen (ich arbeite jetzt seit fast nem Monat an der Datenbank).
Ich bekomme das Auto-Fill einfach nicht hin (ich habs mit Abfragen und mit Mackros probiert, aber da ich weder mySQL, noch basic kann bin ich einfach aufgeschmissen) und die Tabellarische verindung verschiedener Tabellen zu einem Fromular feld, geht das überhaupt? Es ist so schwierig die problematik zu erklären, wenn man die Tabelle nicht sieht.
Die Grundlagen des Formularaufbaus sind soweit relativ klar, nur die hintergründigen Programmierungen (zu sagen wo was herkommen soll und wo was reingeschrieben werden soll) sind so schwierig zu verstehen!
Ich bekomme das Auto-Fill einfach nicht hin (ich habs mit Abfragen und mit Mackros probiert, aber da ich weder mySQL, noch basic kann bin ich einfach aufgeschmissen) und die Tabellarische verindung verschiedener Tabellen zu einem Fromular feld, geht das überhaupt? Es ist so schwierig die problematik zu erklären, wenn man die Tabelle nicht sieht.
Die Grundlagen des Formularaufbaus sind soweit relativ klar, nur die hintergründigen Programmierungen (zu sagen wo was herkommen soll und wo was reingeschrieben werden soll) sind so schwierig zu verstehen!

Re: FormularProgrammierung_Anfägerhilfe
Hab ich schon im ersten eintrag, wird das nicht angezeigt?Gast hat geschrieben:Lade sie hier hoch (unter dem Bearbeitungsfenster -> Dateianhang hochladen).

Re: FormularProgrammierung_Anfägerhilfe
^^ das kenne ich, die Anhangsboxen sind leicht zu übersehen
Re: FormularProgrammierung_Anfägerhilfe
Hallo Lain,
ich habe das Formular gesehen und bin dann einmal in den Bearbeitungsmodus gegangen. Mir scheint da irgendwie die Struktur zu fehlen. Der Listeninhalt für Dein Hauptlistfeld soll "Abfrage_Kunden 2" sein. Diese Abfrage existiert aber gar nicht, die Firma bleibt also leer.
Das Datenfeld "Firma" existiert in der Tabelle "Angebot" überhaupt nicht.
In der Tabelle "Angebot" existiert ein Primärschlüsselfeld, das keinen Autowert Hat. Dieses Feld muss gefüllt sein, bevor irgendetwas abgespeichert werden kann. Mache also die Angebots-Nr. zu einem Autowertfeld oder erstelle zuerst ein Feld in Deinem Formular, das die Eingabe dieser Nummer verlangt.
Wenn Du diese Baustellen erst einmal beseitigt hast, dann lade die DB noch einmal hoch.
Gruß
Robert
ich habe das Formular gesehen und bin dann einmal in den Bearbeitungsmodus gegangen. Mir scheint da irgendwie die Struktur zu fehlen. Der Listeninhalt für Dein Hauptlistfeld soll "Abfrage_Kunden 2" sein. Diese Abfrage existiert aber gar nicht, die Firma bleibt also leer.
Das Datenfeld "Firma" existiert in der Tabelle "Angebot" überhaupt nicht.
In der Tabelle "Angebot" existiert ein Primärschlüsselfeld, das keinen Autowert Hat. Dieses Feld muss gefüllt sein, bevor irgendetwas abgespeichert werden kann. Mache also die Angebots-Nr. zu einem Autowertfeld oder erstelle zuerst ein Feld in Deinem Formular, das die Eingabe dieser Nummer verlangt.
Wenn Du diese Baustellen erst einmal beseitigt hast, dann lade die DB noch einmal hoch.
Gruß
Robert
Re: FormularProgrammierung_Anfägerhilfe
Hallo Robert,
danke das du Dir die zeit nimmst mir zu helfen!
Mit den Sachbearbeiterfeldern ist es das selbe. Im Angebotsbereich reicht es wenn im formular nur der Name im Formular steht, aber in der Tabelle angebot soll die entsprechende Sachbearbeiternummer stehen.
Im Bereich Auftrag soll wie bei den Kundendaten Im Formular der Sachbearbeitername Im Kombinationsfeld ausgewählt werden, in der Auftragstabelle soll die entsprechende Sachbearbeiternummer eingetragen werden.
Falls du noch weitere Fehler findest, sag bitte bescheid ^^
Vielen Dank
danke das du Dir die zeit nimmst mir zu helfen!

Ich hatte gehofft man könnte die Firma oder die Kundennummer in einem Kombinationsfeld auswhählen, die Daten aus der Tabelle Kunden füllen dann automatisch entsprechenden Formularfelder. Und die Daten die im Formularfeld "Kunden-Nr." erscheinen sollen dann automatisch in den Tabellen "Angebot", "Auftrag" und "Rechnung" im Feld Kunden-Nr. gespeichert werden, sobald diese durch eine eingabe der Jeweiligen Primärschlüssel "aktiviert" werden geht das?RobertG hat geschrieben: Das Datenfeld "Firma" existiert in der Tabelle "Angebot" überhaupt nicht.
Mit den Sachbearbeiterfeldern ist es das selbe. Im Angebotsbereich reicht es wenn im formular nur der Name im Formular steht, aber in der Tabelle angebot soll die entsprechende Sachbearbeiternummer stehen.
Im Bereich Auftrag soll wie bei den Kundendaten Im Formular der Sachbearbeitername Im Kombinationsfeld ausgewählt werden, in der Auftragstabelle soll die entsprechende Sachbearbeiternummer eingetragen werden.
Falls du noch weitere Fehler findest, sag bitte bescheid ^^
Vielen Dank
- Dateianhänge
-
- TestDB_Auftragsbearbeitung.odb
- Verbesserte Version
- (90.22 KiB) 82-mal heruntergeladen
Re: FormularProgrammierung_Anfägerhilfe
Hallo Lain,
die ersten Anmerkungen habe ich eben auf die Schnelle gemacht. Jetzt kann ich etwas mehr zu den Grundlagen kommen.
Grundlage sind natürlich die Tabellen und deren Beziehung untereinander. Was mir auf Anhieb auffällig erscheint ist, dass das Ganze wie ein Netz von gegenseitigen Bedingungen aussieht. So eine Ordnung habe ich bei Datenbanken noch nicht gesehen, macht mich also stutzig.
Ich beginne einmal mit der Tabelle "Angebot". So, wie das bei Dir aussieht, gibt es nicht unbedingt ein Angebot, sondern häufig auch direkte Aufträge oder nur Angebote oder auch Angebote, die zu mehreren Aufträgen führen - korrekt?
Tabelle "Rechnung": Wenn ich das richtig lese gibt es Rechnungen, gegebenenfalls auch, wenn kein Auftrag erteilt wurde (schließlich finde ich eine Kundennummer in beiden Tabellen ...). Es kann aber auch mehrere Rechnungen zu einem Auftrag geben (z.B. Teillieferungen?). Es kann bei der Konstruktion sogar möglich sein, dass ein Kunde den Auftrag gibt und ein anderer die Rechnung erhält.
Zweites Problem: Du hast keinen einzigen Primärschlüssel als Autowert festgelegt. Das bedeutet für Dich, dass Du sehr darauf achten musst, auf jeden Fall keine doppelten Schlüsselwerte einzugeben. Wie Du das machen willst - darüber habe ich mir bisher keinen Kopf gemacht. Bei jeder Fehleingabe wirst Du auf jeden Fall eine englischsprachige Meldung auf den Bildschirm bekommen, dass Du ein Feld mit einem Duplikat belegen willst, wo nur ein Unikat sein darf.
Die Schlüsselfelder kannst Du nur ändern, wenn Du in Deinem Beziehungsentwurf die Beziehungen zu dem Feld völlig löst, dann den Schlüssel änderst und hinterher die Beziehungen wieder erstellst.
Wenn wir das geklärt haben, dann lass uns weiter sehen.
Gruß
Robert
die ersten Anmerkungen habe ich eben auf die Schnelle gemacht. Jetzt kann ich etwas mehr zu den Grundlagen kommen.
Grundlage sind natürlich die Tabellen und deren Beziehung untereinander. Was mir auf Anhieb auffällig erscheint ist, dass das Ganze wie ein Netz von gegenseitigen Bedingungen aussieht. So eine Ordnung habe ich bei Datenbanken noch nicht gesehen, macht mich also stutzig.
Ich beginne einmal mit der Tabelle "Angebot". So, wie das bei Dir aussieht, gibt es nicht unbedingt ein Angebot, sondern häufig auch direkte Aufträge oder nur Angebote oder auch Angebote, die zu mehreren Aufträgen führen - korrekt?
Tabelle "Rechnung": Wenn ich das richtig lese gibt es Rechnungen, gegebenenfalls auch, wenn kein Auftrag erteilt wurde (schließlich finde ich eine Kundennummer in beiden Tabellen ...). Es kann aber auch mehrere Rechnungen zu einem Auftrag geben (z.B. Teillieferungen?). Es kann bei der Konstruktion sogar möglich sein, dass ein Kunde den Auftrag gibt und ein anderer die Rechnung erhält.
Zweites Problem: Du hast keinen einzigen Primärschlüssel als Autowert festgelegt. Das bedeutet für Dich, dass Du sehr darauf achten musst, auf jeden Fall keine doppelten Schlüsselwerte einzugeben. Wie Du das machen willst - darüber habe ich mir bisher keinen Kopf gemacht. Bei jeder Fehleingabe wirst Du auf jeden Fall eine englischsprachige Meldung auf den Bildschirm bekommen, dass Du ein Feld mit einem Duplikat belegen willst, wo nur ein Unikat sein darf.
Die Schlüsselfelder kannst Du nur ändern, wenn Du in Deinem Beziehungsentwurf die Beziehungen zu dem Feld völlig löst, dann den Schlüssel änderst und hinterher die Beziehungen wieder erstellst.
Wenn wir das geklärt haben, dann lass uns weiter sehen.
Gruß
Robert
Re: FormularProgrammierung_Anfägerhilfe
Hallo Robert,
zu Problem 1:
da ist mir dann wohl der versuch einer verständlichen Datenbankstrucktur zu erstellen gründlich in die hose gegangen was
Es ist schwierig den gedankengang zu erklären...im anhang findest du die Mind-Map die ich vor dem Aufbau der Datenbanken angefertigt habe.
Es soll eigendlich so laufen...ein Kunde kann Mehrere Angebote einfordern, aber jedes angebot soll nur einem Kunden zugeortnet werden können.
Ein angebot zieht einen auftrag und eine rechnung nach sich, und diese können jeweils einem Kunden zugeordnet werden.
Ich hoffe du verstehst mich.
zu Problem 2:
Ich hatte das mit den Autowerten bewusst weggelassen, weil ich gesehen hab, das es dann probleme gibt, wenn datensätze gelöscht werden. Wenn man jetzt bei sachbearbeitern datensätze gelöscht werden hast du am ende Fünf datensätze die mit ID 123456 und ID 45678913 vergeben sind, kann man das irgendwie umgehen?
Vielen vielen lieben dank, ich hoffe du verstehtst meine gedankengänge, falls du eine bessere Idee zum aufbau hast bitte raus damit, ich bin bereit alles auf den Kopf zu stellen nur damit es endlich funktioniert!!
zu Problem 1:
da ist mir dann wohl der versuch einer verständlichen Datenbankstrucktur zu erstellen gründlich in die hose gegangen was

Es ist schwierig den gedankengang zu erklären...im anhang findest du die Mind-Map die ich vor dem Aufbau der Datenbanken angefertigt habe.
Es soll eigendlich so laufen...ein Kunde kann Mehrere Angebote einfordern, aber jedes angebot soll nur einem Kunden zugeortnet werden können.
Ein angebot zieht einen auftrag und eine rechnung nach sich, und diese können jeweils einem Kunden zugeordnet werden.
Ich hoffe du verstehst mich.
zu Problem 2:
Ich hatte das mit den Autowerten bewusst weggelassen, weil ich gesehen hab, das es dann probleme gibt, wenn datensätze gelöscht werden. Wenn man jetzt bei sachbearbeitern datensätze gelöscht werden hast du am ende Fünf datensätze die mit ID 123456 und ID 45678913 vergeben sind, kann man das irgendwie umgehen?
Vielen vielen lieben dank, ich hoffe du verstehtst meine gedankengänge, falls du eine bessere Idee zum aufbau hast bitte raus damit, ich bin bereit alles auf den Kopf zu stellen nur damit es endlich funktioniert!!
- Dateianhänge
-
- Datenbank-MindMap
- scan.jpg (183.84 KiB) 2156 mal betrachtet
Re: FormularProgrammierung_Anfägerhilfe
Hallo Lain,
ich habe einmal die wichtigsten Tabellen (bis auf den Sachbearbeiter) zusammengefasst.
Ein Kunde → mehrere Angebote: In die Tabelle "Angebote" gehört die Kundennummer als Fremdschlüssel.
Ein Angebot → ein Auftrag und Rechnung: Der Primärschlüssel von "Angebot" ist gleichzeitig Primärschlüssel von der Tabelle Auftrag/Rechnung. Es kann mehrere Angebote geben, aber wenn ein Angebot ausgeführt wird, so wird dazu eine Rechnung gestellt. Verhältnis 1:1. Der Fremdschlüssel des Angebots darf schließlich nur einmal in der anderen Tabelle Auftrag/Rechnung auftauchen. Deshalb gleich einen Primärschlüssel draus gemacht. Auftrag und Rechnung stehen im Verhältnis 1:1 zueinander. Sie haben den gleichen Primärschlüssel. Eigentlich trennst Du die Tabellen nur, wenn sie Dir sonst zu groß sind oder z.B. Aufträge ohne Rechnung oder umgekehrt häufiger der Fall sind - für Dein Beispiel also vermutlich nie.
Der Sachbearbeiter taucht als Fremdschlüssel eventuell nur im "Angebote" auf - es sei denn, die Sachbearbeiter für "Auftrag/Rechnung" sind andere Personen. Insgesamt werden also daraus bei mir 3 Verbindungslinien zwischen den Tabellen. Den Kunden für eine Rechnung erschließe ich aus dem Angebot. Da brauche ich kein zusätzliches Feld.
Die Geschichte mit den Autowerten habe ich nicht verstanden. Wenn ein Autowert gewählt wird gibt es doch gerade keine Doppler in der Schlüsseln. Was hat damit das Löschen eines Wertes zu tun? Angenommen, es wurden die Schlüssel 1,2,3,4,5 vergeben und 3 wurde anschließend gelöscht, dann zählt die Datenbank dennoch bei 6 weiter und vergibt die 3 nicht erneut.
Gruß
Robert
ich habe einmal die wichtigsten Tabellen (bis auf den Sachbearbeiter) zusammengefasst.
Ein Kunde → mehrere Angebote: In die Tabelle "Angebote" gehört die Kundennummer als Fremdschlüssel.
Ein Angebot → ein Auftrag und Rechnung: Der Primärschlüssel von "Angebot" ist gleichzeitig Primärschlüssel von der Tabelle Auftrag/Rechnung. Es kann mehrere Angebote geben, aber wenn ein Angebot ausgeführt wird, so wird dazu eine Rechnung gestellt. Verhältnis 1:1. Der Fremdschlüssel des Angebots darf schließlich nur einmal in der anderen Tabelle Auftrag/Rechnung auftauchen. Deshalb gleich einen Primärschlüssel draus gemacht. Auftrag und Rechnung stehen im Verhältnis 1:1 zueinander. Sie haben den gleichen Primärschlüssel. Eigentlich trennst Du die Tabellen nur, wenn sie Dir sonst zu groß sind oder z.B. Aufträge ohne Rechnung oder umgekehrt häufiger der Fall sind - für Dein Beispiel also vermutlich nie.
Der Sachbearbeiter taucht als Fremdschlüssel eventuell nur im "Angebote" auf - es sei denn, die Sachbearbeiter für "Auftrag/Rechnung" sind andere Personen. Insgesamt werden also daraus bei mir 3 Verbindungslinien zwischen den Tabellen. Den Kunden für eine Rechnung erschließe ich aus dem Angebot. Da brauche ich kein zusätzliches Feld.
Die Geschichte mit den Autowerten habe ich nicht verstanden. Wenn ein Autowert gewählt wird gibt es doch gerade keine Doppler in der Schlüsseln. Was hat damit das Löschen eines Wertes zu tun? Angenommen, es wurden die Schlüssel 1,2,3,4,5 vergeben und 3 wurde anschließend gelöscht, dann zählt die Datenbank dennoch bei 6 weiter und vergibt die 3 nicht erneut.
Gruß
Robert
Re: FormularProgrammierung_Anfägerhilfe
Hallo Lain,
ich habe gerade eine Stunde investiert, um einmal etwas in den Tabellen so aufzuräumen, wie ich es für sinnvoll hielt. Meines Erachtens brauchst Du keine Auftrags- und Rechnungsnummer. Die bildest Du aus der Angebotsnummer zusammen mit einem Zusatz "AU-2012-..." für Auftragsnummer und das Jahr 2012und ähnlich, nur mit RE, die Rechnungsnummer. Auch die Ja/Nein-Felder sind eigentlich überflüssig. Sie geben ja eigentlich nur wieder, ob z.B. die Rechnung bezahlt wurde - also ablesbar aus dem Zahlungsdatum.
Sieh' Dir einfach einmal den Vorschlag an.
Was mir auffiel: Deine Listenfelder haben nie das Fremdschlüsselfeld angesprochen, so dass sie auch nichts in der darunterliegenden Tabelle abspeichern konnten. Gerade das ist doch aber der Sinn dieser Felder. Du wählst einen Kunden aus und dessen Kunden-Nr. wird dann in die Tabelle "Angebot" eingetragen.
Und noch eine Frage: Wozu brauchst Du in Deiner Datenbank das Makro?
Gruß
Robert
ich habe gerade eine Stunde investiert, um einmal etwas in den Tabellen so aufzuräumen, wie ich es für sinnvoll hielt. Meines Erachtens brauchst Du keine Auftrags- und Rechnungsnummer. Die bildest Du aus der Angebotsnummer zusammen mit einem Zusatz "AU-2012-..." für Auftragsnummer und das Jahr 2012und ähnlich, nur mit RE, die Rechnungsnummer. Auch die Ja/Nein-Felder sind eigentlich überflüssig. Sie geben ja eigentlich nur wieder, ob z.B. die Rechnung bezahlt wurde - also ablesbar aus dem Zahlungsdatum.
Sieh' Dir einfach einmal den Vorschlag an.
Was mir auffiel: Deine Listenfelder haben nie das Fremdschlüsselfeld angesprochen, so dass sie auch nichts in der darunterliegenden Tabelle abspeichern konnten. Gerade das ist doch aber der Sinn dieser Felder. Du wählst einen Kunden aus und dessen Kunden-Nr. wird dann in die Tabelle "Angebot" eingetragen.
Und noch eine Frage: Wozu brauchst Du in Deiner Datenbank das Makro?
Gruß
Robert
- Dateianhänge
-
- TestDB_Auftragsbearbeitung_2.odb
- (92 KiB) 80-mal heruntergeladen
Re: FormularProgrammierung_Anfägerhilfe
Hallo Robert,
du warst wohl schneller als ich ^^ ich war gerade fertig die DB anzupassen, und wollte sie hochladen, als ich gesehen hab, das du das schon gemacht hast.
Aber du hattest vollkommen rech, ich hab schon bei der Vorbereitung einfach zu schwierig gedacht!
Vielen Vielen lieben dank, Klasse!
Also die Ja/nein felder sind wirklich nur dazu da, damit man schnell sehen kann, das der auftrag/rechnung abgeschlossen ist, damit man nicht lange aufs datum gucken muss.
diese Felder sind wirklich nur dazu da, den Status auf einen Blick ersichtlich zu machen.
Das mit dem Listenfeld war die ganze zeit ein problem das ich nicht verstanden habe, nämich wie man den Fremdschlüssel definiert und vorallem wie man die beziehungen des fremdschlüssels richtig definiert!
Ich ja über all versucht es nachzulesen oder nachzuprogrammieren, aber leider bin ich ein mensch, dem man alles so erklärem muss als wer er 6 jahre alt ^^ ich habs einfach nicht verstanden.
Tja und das makro habe ich versucht einzubinden weil ich hier im Forum einen eintrag bezüglich Autofill funktionen gefunden habe und Aufgrund der TestDB die Hochgeladen wurde versucht habe das ganze nachzuprogrammieren, mit mäßigem erfolg wie du gesehen hast ^^
Zu deinen anmerkungen in der Tabelle Auftrag: das mit dem Boolean hab ich ja schon erklärt. Und das Mahnverfahren muss leider mit berücksichtigt werden, die daten sind dazu da nachvollziehen zu können, wann die einzelnen schritte unternommen wurden.
Wegen der berechenbarkeit der Datums-Angaben, ist es möglich das den wert in dem Summenfeld nach der automatischen berechnung noch zu verändern (z.b. wenn z.b. ein kunde vereinbart, das er erst später zahlt)?
Das mit der automatischen Auftrags und rechnungs nummer ist toll, Ich hatte gegelaubt, das in den feldern immer ein wert eingegeben werden muss er in einer tabelle hinterlegt ist und nicht das dort direkte SQL befehle umgesetzt werden.
Ganz liebe Grüße
Lain
du warst wohl schneller als ich ^^ ich war gerade fertig die DB anzupassen, und wollte sie hochladen, als ich gesehen hab, das du das schon gemacht hast.
Aber du hattest vollkommen rech, ich hab schon bei der Vorbereitung einfach zu schwierig gedacht!
Vielen Vielen lieben dank, Klasse!
Also die Ja/nein felder sind wirklich nur dazu da, damit man schnell sehen kann, das der auftrag/rechnung abgeschlossen ist, damit man nicht lange aufs datum gucken muss.
diese Felder sind wirklich nur dazu da, den Status auf einen Blick ersichtlich zu machen.
Das mit dem Listenfeld war die ganze zeit ein problem das ich nicht verstanden habe, nämich wie man den Fremdschlüssel definiert und vorallem wie man die beziehungen des fremdschlüssels richtig definiert!
Ich ja über all versucht es nachzulesen oder nachzuprogrammieren, aber leider bin ich ein mensch, dem man alles so erklärem muss als wer er 6 jahre alt ^^ ich habs einfach nicht verstanden.
Tja und das makro habe ich versucht einzubinden weil ich hier im Forum einen eintrag bezüglich Autofill funktionen gefunden habe und Aufgrund der TestDB die Hochgeladen wurde versucht habe das ganze nachzuprogrammieren, mit mäßigem erfolg wie du gesehen hast ^^
Zu deinen anmerkungen in der Tabelle Auftrag: das mit dem Boolean hab ich ja schon erklärt. Und das Mahnverfahren muss leider mit berücksichtigt werden, die daten sind dazu da nachvollziehen zu können, wann die einzelnen schritte unternommen wurden.
Wegen der berechenbarkeit der Datums-Angaben, ist es möglich das den wert in dem Summenfeld nach der automatischen berechnung noch zu verändern (z.b. wenn z.b. ein kunde vereinbart, das er erst später zahlt)?
Das mit der automatischen Auftrags und rechnungs nummer ist toll, Ich hatte gegelaubt, das in den feldern immer ein wert eingegeben werden muss er in einer tabelle hinterlegt ist und nicht das dort direkte SQL befehle umgesetzt werden.
Ganz liebe Grüße
Lain
Re: FormularProgrammierung_Anfägerhilfe
Hallo Lain,
In der von mir angehängten Datenbank war eine Abfrage "Abfrage_AuftragNr_RechnungNr". Diese Abfrage erstellt aus der "Auftrag"-Tabelle nebenher die Auftragsnummer und die Rechnungsnummer und ist Grundlage für das Formular "Auftragsbearbeitung". ich habe die Abfrage hier einmal ergänzt:
Der Start mit "Auftrag".* stellt die gesamte Tabelle "Auftrag" dar. Anschließend werden "Auftrag-Nr." und "Rechnung-Nr." erstellt. Mit den || werden Felder oder auch Textinhalte verbunden. Da es sich um Textinhalte halten soll, habe ich aus dem Jahr und der Angebotsnummer einfach Text erstellt und entsprechend verbunden. Diese Felder hast Du schon, auch in dem Formular - dort dann als schreibgeschützt, werden also nur dargestellt.
Anschließend wird mit CASE WHEN nachgefragt, ob das "Abschluss-Datum" leer ist (IS NULL). Wenn es leer ist, dann wird in einer Checkbox "FALSE" (also Nein, nicht angekreuzt) angegeben, wenn es gefüllt ist, dann wird "TRUE" angegeben. Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig. Die Eigenschaft kannst Du in dem Formular aus diesen Feldern lesen. Du brauchst also nichts anzuklicken und läufst damit auch nicht die Gefahr, das einmal zu vergessen und plötzlich eine Erinnerung zu schicken, weil eben das Ja/Nein-Feld nicht gefüllt war.
Früher habe ich mir damit geholfen, einfach eine Tabelle zu erstellen, die aus lauter Datumswerten und fortlaufenden Zahlenwerten bestand. Habe dazu einfach Calc benutzt, oben "1" und das gewünschte Startdatum angegeben und dann mit der Autofill-Funktion nach unten gezogen. Da hatte ich dann eine Tabelle mit fortlaufenden Datumswerten und Zahlenwerten. 5 Tage aufwärts war: Startdatum nachsehen, Wert daneben auslesen, 5 addieren, Ergebnisdatum nachsehen.
Mittlerweile würde ich so etwas mit DateADD() über Makros realisieren. Allerdings ist es mit dem Kalender in Datumsfeldern doch recht einfach, eben einmal 2 Wochen Zahlungsfrist nachzuvollziehen. Ein per Makro ermittelter Wert könnte natürlich geändert werden. Er würde nur dann geschrieben, wenn keine Zahlungsfrist vorgegeben wurde - also bei einem leeren Feld.
Ich weiß allerdings im Moment nicht, ob ich das Makro hier irgendwo greifbar liegen habe.
Gruß
Robert
Also würde das Folgende reichen:Lain hat geschrieben:Also die Ja/nein felder sind wirklich nur dazu da, damit man schnell sehen kann, das der auftrag/rechnung abgeschlossen ist, damit man nicht lange aufs datum gucken muss.
diese Felder sind wirklich nur dazu da, den Status auf einen Blick ersichtlich zu machen.
In der von mir angehängten Datenbank war eine Abfrage "Abfrage_AuftragNr_RechnungNr". Diese Abfrage erstellt aus der "Auftrag"-Tabelle nebenher die Auftragsnummer und die Rechnungsnummer und ist Grundlage für das Formular "Auftragsbearbeitung". ich habe die Abfrage hier einmal ergänzt:
Code: Alles auswählen
SELECT "Auftrag".*, 'AU-' || CONVERT ( YEAR( "Auftrag"."Auftrag-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Auftrag-Nr.", 'RE-' || CONVERT ( YEAR( "Auftrag"."Rechnung-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Rechnung-Nr.", CASE WHEN "Auftrag"."Abschluss-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Auftrag erteilt", CASE WHEN "Auftrag"."Zahlungseingang-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Gezahlt" FROM "Auftrag"
Anschließend wird mit CASE WHEN nachgefragt, ob das "Abschluss-Datum" leer ist (IS NULL). Wenn es leer ist, dann wird in einer Checkbox "FALSE" (also Nein, nicht angekreuzt) angegeben, wenn es gefüllt ist, dann wird "TRUE" angegeben. Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig. Die Eigenschaft kannst Du in dem Formular aus diesen Feldern lesen. Du brauchst also nichts anzuklicken und läufst damit auch nicht die Gefahr, das einmal zu vergessen und plötzlich eine Erinnerung zu schicken, weil eben das Ja/Nein-Feld nicht gefüllt war.
Du hast für das Mahnverfahren 3 Datumsfelder in der Tabelle. In dem Bibliotheksprogramm, das dem Handbuch Base beiliegt, habe ich auch 3 Mahnmöglichkeiten. Nur ist dieses Verfahren ausgegliedert. Es gibt dann eine Tabelle, die nur die Angebotsnummer und ein Datum speichern würde. Das erste Datum wäre die Erinnerung, das 2. Datum die erste Mahnung ... Du könntest so beliebig viele Mahnungen verschicken, bevor das letzte Datum "Inkasso-Datum" vollzogen wird. Das ist in sofern universeller handhabbar, als wirklich jeder Mahnschriftverkehr festgehalten wird und nicht eben nur drei Datumswerte mit unterschiedlicher Benennung.Lain hat geschrieben:Zu deinen anmerkungen in der Tabelle Auftrag: das mit dem Boolean hab ich ja schon erklärt. Und das Mahnverfahren muss leider mit berücksichtigt werden, die daten sind dazu da nachvollziehen zu können, wann die einzelnen schritte unternommen wurden.
Die Berechnung so eines Datums im Voraus ist leider mit den Mitteln der mitgelieferten HSQLDB nicht möglich. Andere Datenbanken, auch die aktuelle Version der frei verfügbaren HSQLDB, haben so eine Funktion wie DATE_ADD(). Mit der eingebauten Datenbank kannst Du zwar den Unterschied zwischen zwei Datumswerten über DATEDIFF() ausrechnen - in allen möglichen Maßeinheiten - aber der umgekehrte Weg geht nicht mit vertretbarem Aufwand - abgesehen davon, dass die Schaltjahre Zusatzprobleme bereiten.Lain hat geschrieben: Wegen der berechenbarkeit der Datums-Angaben, ist es möglich das den wert in dem Summenfeld nach der automatischen berechnung noch zu verändern (z.b. wenn z.b. ein kunde vereinbart, das er erst später zahlt)?
Früher habe ich mir damit geholfen, einfach eine Tabelle zu erstellen, die aus lauter Datumswerten und fortlaufenden Zahlenwerten bestand. Habe dazu einfach Calc benutzt, oben "1" und das gewünschte Startdatum angegeben und dann mit der Autofill-Funktion nach unten gezogen. Da hatte ich dann eine Tabelle mit fortlaufenden Datumswerten und Zahlenwerten. 5 Tage aufwärts war: Startdatum nachsehen, Wert daneben auslesen, 5 addieren, Ergebnisdatum nachsehen.
Mittlerweile würde ich so etwas mit DateADD() über Makros realisieren. Allerdings ist es mit dem Kalender in Datumsfeldern doch recht einfach, eben einmal 2 Wochen Zahlungsfrist nachzuvollziehen. Ein per Makro ermittelter Wert könnte natürlich geändert werden. Er würde nur dann geschrieben, wenn keine Zahlungsfrist vorgegeben wurde - also bei einem leeren Feld.
Ich weiß allerdings im Moment nicht, ob ich das Makro hier irgendwo greifbar liegen habe.
Gruß
Robert
Re: FormularProgrammierung_Anfägerhilfe
Hallo Robert,
ich hoffe du hattest ein angenehmes Wochenende!
In der Theorie habe ich den Code verstanden, aber mir bereiten die Teile "Auftrag erteilt" und "Gezahlt" kopfzerbrechen...Soll das in einem Textfeld ergenzt werden?

Liebe grüße Claudia
ich hoffe du hattest ein angenehmes Wochenende!
Meinst du damit das die Ja/Nein-Felder aus der Tabelle gelöscht werden können, oder wenden die nur Automatisch auf ja oder nein gesetzt.RobertG hat geschrieben:...Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig...Code: Alles auswählen
CASE WHEN "Auftrag"."Abschluss-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Auftrag erteilt", CASE WHEN "Auftrag"."Zahlungseingang-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Gezahlt" FROM "Auftrag"
In der Theorie habe ich den Code verstanden, aber mir bereiten die Teile "Auftrag erteilt" und "Gezahlt" kopfzerbrechen...Soll das in einem Textfeld ergenzt werden?
Da hatte ich ja schon geschrieben das es wirklich nur die 3 Stufen des Mahhnverfahrens sind, lohnt es sich da für die 3 schritte eine eigene Tabelle aufzumachen?RobertG hat geschrieben:Du könntest so beliebig viele Mahnungen verschicken, bevor das letzte Datum "Inkasso-Datum" vollzogen wird. Das ist in sofern universeller handhabbar, als wirklich jeder Mahnschriftverkehr festgehalten wird und nicht eben nur drei Datumswerte mit unterschiedlicher Benennung.
Also ich bin auch der meinung, das es eigendlich relativ einfach ist 2 Wochen fristen manuell anzugeben, bei zeiträumen ab einem Monat lohnt es sich erst richtig, des wegen können wir das getrohst außen vor lassen. Villeicht später mal, wenn ich die hürden der noob-heit überwunden habeRobertG hat geschrieben:Da hatte ich dann eine Tabelle mit fortlaufenden Datumswerten und Zahlenwerten. 5 Tage aufwärts war: Startdatum nachsehen, Wert daneben auslesen, 5 addieren, Ergebnisdatum nachsehen.
Mittlerweile würde ich so etwas mit DateADD() über Makros realisieren. Allerdings ist es mit dem Kalender in Datumsfeldern doch recht einfach, eben einmal 2 Wochen Zahlungsfrist nachzuvollziehen. Ein per Makro ermittelter Wert könnte natürlich geändert werden. Er würde nur dann geschrieben, wenn keine Zahlungsfrist vorgegeben wurde - also bei einem leeren Feld.

Liebe grüße Claudia
- Dateianhänge
-
- Fehlermeldung bei Codeeingabe
- Bildschirmfoto 2012-07-30 um 10.39.18.png (102.8 KiB) 2069 mal betrachtet
Re: FormularProgrammierung_Anfägerhilfe
Hallo Claudia,
...
Du hast aus irgendeinem mir erst einmal nicht ersichtlichen Grund eine Fehlermeldung von Deinem OpenOffice bekommen. Bei mir funktioniert das einwandfrei, auch mit OOo 3.3. Ich hänge einfach die Datei mit den Änderungen (bis auf die Löschung der Felder in der Tabelle) noch einmal an. Ich habe die Felder in dem Formular jetzt mit den entsprechenden Feldern aus der Abfrage verknüpft. Die vorherigen Ja/Nein-Felder sind also nicht mehr nötig.
Gruß
Robert
Ja, die Felder können gelöscht werden. Es wird nachgesehen, ob das Abschlussdatum leer ist. Enthält es keinen Wert, so wird das "FALSE" eines Ja/Nein-Feldes zurückgegeben. Enthält es einen Wert, so erscheint das "TRUE" (also: Ja). Mit AS "Auftrag erteilt" weise ich dem entstehenden Feld einen Namen zu. Das bedeutet, dass Du dieses Feld als Ja-Nein-Feld "Auftrag erteilt" angezeigt bekommst.Lain hat geschrieben:Meinst du damit das die Ja/Nein-Felder aus der Tabelle gelöscht werden können, oder wenden die nur Automatisch auf ja oder nein gesetzt.RobertG hat geschrieben:...Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig...Code: Alles auswählen
CASE WHEN "Auftrag"."Abschluss-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Auftrag erteilt", CASE WHEN "Auftrag"."Zahlungseingang-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Gezahlt" FROM "Auftrag"
In der Theorie habe ich den Code verstanden, aber mir bereiten die Teile "Auftrag erteilt" und "Gezahlt" kopfzerbrechen...Soll das in einem Textfeld ergenzt werden?
...
Du hast aus irgendeinem mir erst einmal nicht ersichtlichen Grund eine Fehlermeldung von Deinem OpenOffice bekommen. Bei mir funktioniert das einwandfrei, auch mit OOo 3.3. Ich hänge einfach die Datei mit den Änderungen (bis auf die Löschung der Felder in der Tabelle) noch einmal an. Ich habe die Felder in dem Formular jetzt mit den entsprechenden Feldern aus der Abfrage verknüpft. Die vorherigen Ja/Nein-Felder sind also nicht mehr nötig.
Gruß
Robert
- Dateianhänge
-
- TestDB_Auftragsbearbeitung_2.odb
- (91.89 KiB) 85-mal heruntergeladen
Re: FormularProgrammierung_Anfägerhilfe
Hallo Robert,
Danke für die rasche hilfe, jetzt hab ich den fehler versanden, ich hatte den Code im Feld falsch angegeben und "Auftrag Erteilt" nicht als Alias Gesetzt.
mir ist jetzt etwas neues aufgefallen. Ich hatte gedacht, das eine Kurze beschreibung des Auftrages angebracht wäre, ich hatte versucht einen Tabelleneintrag (memo) zu erstellen und die Felder im Formular über den Feld-Navigator einzipflegen, aber das feld wird garnicht in der liste angezeigt, muß ich die Tabelle noch mal neu in beziehung setzen?
Oder sollte das garnicht in den Tabellen hinterlegt weden, sondern genau wie das "Auftrag Erteilt" nur in der Abfrage?
Gruß Lain
Danke für die rasche hilfe, jetzt hab ich den fehler versanden, ich hatte den Code im Feld falsch angegeben und "Auftrag Erteilt" nicht als Alias Gesetzt.
mir ist jetzt etwas neues aufgefallen. Ich hatte gedacht, das eine Kurze beschreibung des Auftrages angebracht wäre, ich hatte versucht einen Tabelleneintrag (memo) zu erstellen und die Felder im Formular über den Feld-Navigator einzipflegen, aber das feld wird garnicht in der liste angezeigt, muß ich die Tabelle noch mal neu in beziehung setzen?
Oder sollte das garnicht in den Tabellen hinterlegt weden, sondern genau wie das "Auftrag Erteilt" nur in der Abfrage?
Gruß Lain