Probleme mit myodbc mysql und access

hi,

ich habe hier ein kleines problem das wie folgt aussieht:

eine access db habe ich nach mysql portiert, die mysql db via linked tables an das alte db frontend in access eingepflegt.

es funktioniert jetzt auch schon fast alles, bis auf diese doch sehr wichtige Kleinigkeit:

eine schaltflaeche mit filterfunktion in access.
wird es gedrueckt, oeffnet sich ein unterformular. in diesem soll es moeglich sein, ein feld das noch nicht existiert mit neuen daten zu fuellen.

Access ist ja so aufgebaut, dass es auf eine eingabe des benutzers wartet, bevor es das neue feld fuellt.

bei mir besteht das problem, dass in dem sich oeffnenden formular die eingabefelder schlechthin nicht vorhanden sind, also ich ueberhaupt nichts neues eingeben kann. theoretisch waere das richtig, wenn ja access nicht so dynamisch aufgebaut waere. prinzipiell denke ich mir das passiert so:

access fragt myodbc, myodbc fragt mysql (select statement kommt in mysql an, sagt das log), gibt eine leere abfrage zuruck, und jetzt muss hier der entscheidende fehler passieren, denn anscheinend gibt myodbc eine ungueltige info an access zurueck, denn sonst muesste ja eigentlich nun von access das formular mit leeren auf fuelleung begierige wartenden felder erscheinen, sobald es von myodbc die antwort Feld existiert nicht bekommt.

hmm, naja soviel zu meiner spekulation, kann hier jemand wirklich was zu der Art von fehler sagen. MySQL faq und mailinglist bringen mich nicht weiter.

hoffe auf hilfe

  • josh -

Hallo, Josh!

access fragt myodbc, myodbc fragt mysql (select statement
kommt in mysql an, sagt das log), gibt eine leere abfrage
zuruck, und jetzt muss hier der entscheidende fehler

Kein Fehler: Access bekommt einen leeren Recordset zurück. So weit, so schlecht. Du lässt Dir im Formular gebundene Felder anzeigen. Darüebr hinaus wirst Du wahrscheinlich nicht die Eingabe neuer Datensätze zulassen. Wenn dann nämlich die Datenquelle leer ist, wird der Bereich mit den gebundenen Feldern nicht gesetzt und die Felder werden nicht angezeigt.

Abhilfe: Arbeite mit ungebundenen Feldern oder lass die Neueingabe von Datensätzen zu. Ich habe jetzt noch nicht genau verstanden, was das Formular machen soll. Soll es leere Felder zu existierenden Datensätzen füllen? Oder neue Datensätze erzeugen?

hmm, naja soviel zu meiner spekulation, kann hier jemand

Und soviel zu meinen Spekulationen. Wie sieht denn genau Dein Formular aus? Was ist die Datenquelle? Was für Felder hast Du? Vielleicht geht’s dann genauer…

Gruß, Manfred

Hallo, Josh!

access fragt myodbc, myodbc fragt mysql (select statement
kommt in mysql an, sagt das log), gibt eine leere abfrage
zuruck, und jetzt muss hier der entscheidende fehler

Kein Fehler: Access bekommt einen leeren Recordset zurück. So
weit, so schlecht. Du lässt Dir im Formular gebundene Felder
anzeigen. Darüebr hinaus wirst Du wahrscheinlich nicht die
Eingabe neuer Datensätze zulassen. Wenn dann nämlich die
Datenquelle leer ist, wird der Bereich mit den gebundenen
Feldern nicht gesetzt und die Felder werden nicht angezeigt.

Abhilfe: Arbeite mit ungebundenen Feldern oder lass die
Neueingabe von Datensätzen zu. Ich habe jetzt noch nicht genau
verstanden, was das Formular machen soll. Soll es leere Felder
zu existierenden Datensätzen füllen? Oder neue Datensätze
erzeugen?

ok, meine beschreibung war wohl etwas duenn:
ich habe folgende Relationen:

observation      
observation_id  
…                        
…                        


activity_no_focal     
activity_no_focal_id
observation_id         
Activity_1                 
Activity_2                 
Activity_3                 
Activity_4                 

wenn man sich im formular befindet, indem man ein feld observation anlegen kann, gibt es zusaetzlich dazu noch einen button, activity_no_focal. wird auf diesen geklickt, action_instance, die an das sich oeffnende formular, die observation_id uebergibt (ich glaube in access spricht man hierbei von filter, ist das richtig?).

So: das Formular das sich oeffnet, hat nun zwei funktionen: update, falls fuer die observation_id schon exisitiert (irrelevant, denn das funktioniert) oder aber auch zu einer gegebenen observation_id ein neues feld anlegen. in jedem formular ist es normalerweise so, das, wenn zu einem foreign key noch kein eintrag exisiert, automatisch das feld neu angelegt wird. aber in meinem beispiel ist es so, das anstatt wie üblich die felder mit einer leeren Eingabemaske zur Verfuegung stehen, die felder wie oben Activity_1 - Activity_4 nicht nur mit inaktiven eingabemasken versehen sind, nein noch besser, die Eingabemasken sind in dem Formular schlicht nicht vorhanden. das ganze layout ist da, aber die eingabemasken nicht. auch der Filter funktioniert. observation_id wurde korrekt an das formular weitergegeben. die abfrage an mysql ist richtig, und mysql gibt wie oben schon richtig gesagt ein leeres set zurueck. soll ja auch so sein. nur access weigert sich. daher ist mir zunaechst in den sinn gekommen, dass das woh an myODBC liegt, denn in den anderen formularen klappt das hinzufuegen mit daten das benutzen von filtern ja auch herrvorragend. nur eben bei diesem einen spezifischen fall, funktioniert es halt nicht.

hmm, naja soviel zu meiner spekulation, kann hier jemand

Und soviel zu meinen Spekulationen. Wie sieht denn genau Dein
Formular aus? Was ist die Datenquelle? Was für Felder hast Du?
Vielleicht geht’s dann genauer…

Gruß, Manfred

ich hoffe mit diesen Angaben wird die analyse einfacher.

vielen dank manfred
gruss

  • josh -

Hallo, Josh!

Hmmm. Was genau machst Du beim Öffnen des nachrangigen Formulars? Und wie übergibst Du die Id? Als Filterkriterium, vermute ich.

Ich würde dann im sinnvollen Ereignis (Wird das Formular zwischendrin geschlossen? Dann kannst Du das beim Open machen. Bleibt das Formular als Popup offen, würde ich es im Activate machen. Oder gleich in eine externe Funktion auslagern.) wie folgt vorgehen:

  1. Überprüfen auf vorhandene Datensätze.
  2. Wenn Anzahl>0, ist alles okay.
  3. Wenn Anzahl=0, dann:
    3.1 Neuen Datensatz anlegen
    3.2 Id aus ForeignTable setzen
    3.3 Datensatz speichern
    3.4 Requery des Formulars

Eigentlich würde ich diese Aktionen sogar beim Klicken der Schaltfläche noch vorm Öffnen des anchrangigen Formulars ausführen. So solltest Du sicher sein können, dass der gewünschte Datensatz immer vorhanden ist.

Gruß, Manfred

1 Like

nein, wirklich nichts!