Announcement

Collapse
No announcement yet.

Probleme beim Datenmodul + ADO

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme beim Datenmodul + ADO

    HAb jetzt eine ADOConnection + 2ADOTables + 2TDatasorce in mein Datamodul gesetzt, jetzt habe ich folgendes Problem

    Wenn ich versuche die Tables über MAstersource zu verknüpfen schreibt er mir folgende Fehlermeldung hin "Das Objekt oder der Provider kann den angeforderten Vorgang nicht ausführen"

    Warum geht das jetzt nicht mehr?

  • #2
    Das Problem lag daran, das der CursorLocation auf UseServer (Detailtabelle) lag.

    Jetzt ist meine Frage <b>WARUM?</b&gt

    Comment


    • #3
      Nächstes Problem!

      Also wenn beim Start das Datenmodul aufgerufen wird schreibt er 3mal hin <b>'' konnte nicht verwendet werden; Datei wird bereits verwendet </b>

      Meint er meine <b>projekt.udl</b>?

      Und die dazugehörende Hilfe ist nicht verfügbar!

      Muß ich die Connection erst beim Datenzugriff öffnen oder kann sie die ganze Zeit active sein(solange ich keine Änderung der Eigenschaften durchführe

      Comment


      • #4
        Nächstes Problem!

        Also wenn beim Start das Datenmodul aufgerufen wird schreibt er 3mal hin '' konnte nicht verwendet werden; Datei wird bereits verwendet

        Meint er meine projekt.udl?

        Und die dazugehörende Hilfe ist nicht verfügbar!

        Muß ich die Connection erst beim Datenzugriff öffnen oder kann sie die ganze Zeit active sein(solange ich keine Änderung der Eigenschaften durchführe

        Comment


        • #5
          Hallo,

          der Griff nach TADOTable war <b>keine</b> gute Wahl. Ich hatte früher schon einmal in einer Antwort gesagt, dass TADOTable nur eine Kompatibilitätskomponente ist, die das Verhalten der BDE-Komponenten so weit möglich auch unter ADO simuliert. Eine der sich daraus ergebenden Kompromisse betrifft <b>clUseClient</b> - denn ein Client-side-Cursor muss immer dann verwendet werden, wenn die VCL intern <b>Bookmarks</b> zur Synchronisation der beiden Datenmengen einsetzt. Wenn TADOTable und der Feldverbindungs-Designer verwendet werden soll, muss man mit clUseClient leben.

          Allerdings gilt diese Einschränkung <b>nicht</b> für <b>TADODataSet</b> - hier hat der Entwickler freie Wahl. Das folgende Beispiel verbindet die Tabellen <i>CUSTOMER</i> und <i>ORDERS</i> aus der Delphi-Datenbank DBDEMOS.MDB in einem Datenmodul. Beide TADODataSet-Instanzen verwenden <b>clUseServer</b>, wobei allerdings die Anbindung der Detail-Datenmenge über SQL erfolgt:
          <pre>
          object ADODataSet1: TADODataSet
          Active = True
          Connection = ADOConnection1
          CursorLocation = clUseServer
          CommandText = 'customer'
          CommandType = cmdTableDirect
          Parameters = <>
          Left = 200
          Top = 24
          object ADODataSet1CustNo: TFloatField
          FieldName = 'CustNo'
          end
          object ADODataSet1Company: TWideStringField
          FieldName = 'Company'
          Size = 30
          end
          object ADODataSet1City: TWideStringField
          FieldName = 'City'
          Size = 15
          end
          end
          object DataSource1: TDataSource
          DataSet = ADODataSet1
          Left = 328
          Top = 24
          end
          object ADODataSet2: TADODataSet
          Active = True
          Connection = ADOConnection1
          CursorLocation = clUseServer
          CommandText =
          'SELECT CustNo, OrderNo, AmountPaid FROM orders WHERE CustNo = :CustNo'
          DataSource = DataSource1
          MasterFields = 'CustNo'
          Parameters = <
          item
          Name = 'CustNo'
          Attributes = [paNullable]
          DataType = ftFloat
          NumericScale = 255
          Precision = 255
          Value = 1221
          end>
          Left = 200
          Top = 96
          end
          object DataSource2: TDataSource
          DataSet = ADODataSet2
          Left = 328
          Top = 96
          end
          end
          </pre>
          Wenn nun ADODataSet2 über die Eigenschaft <b>DataSource</b> mit der anderen TADODataSet-Instanz verbunden wird, führt Delphi immer dann ADODataSet2 <b>automatisch mit neuem Parameter neu aus</b>, wenn <br>
          a) der Datensatzzeiger von ADODataSet1 sich ändert und <br>
          b) der Parametername von ADODataSet2 einem Feldnamen von ADODataSet1 entspricht.<br>
          Somit wird auch hier alles im Objektinspektor konfiguriert, aber mit deutlich weiteren Spielraum, was die Konfigurationsoptionen angeht. Vom Verhalten her ist diese TADODataSet-Lösung für den Benutzer mit der TADOTable-Lösung identisch. Wenn er mit dem DBNavigator den CUSTOMER-Datensatz wechselt, aktualisiert sich auch die Anzeige im DBGrid für ORDERS. Nur mit dem Unterschied, dass intern dazu die SELECT-Abfrage für ADODataSet2 neu ausgeführt wird, anstelle die zusammengehörenden Datensätze über Bookmarks zu ermitteln.

          P.S: Zur Eingrenzung der Ursache für die anderen Fehlermeldungen würde ich ein neues Projekt geginnen und dort nur die zum Test benötigten Komponenten ablegen. Derartige Fehlermeldungen habe ich noch nie zu Gesicht bekommen

          Comment


          • #6
            Ich habe gestern noch versucht das ganze über Datasets zu lösen, aber die Fehlermeldung bekomme ich nicht weg!!!

            Kannst du mir sagen woran diese Meldung liegt??
            <b>'' konnte nicht verwendet werden; Datei wird bereits verwendet </b&gt

            Comment


            • #7
              <b>Hi Andreas!</b>

              1)Ich komme mit deiner <b>SQL Anweisung</b> nicht zurecht (sollte mir wirklich mal ein gutes SQL Buch zulegen!!)

              <pre>'SELECT CustNo, OrderNo, AmountPaid FROM orders WHERE CustNo :CustNo' </pre>

              Könntest du sie mir bitte erklären?

              2) Kannst du mir deine Parameter Angaben (ADODataSet2) auch gleich erklären??

              DAnke BINE :_)
              &#10

              Comment


              • #8
                Hallo,

                zur Fehlermeldung: <br>
                Diese Fehlermeldung habe ich noch niemals zu Gesicht bekommen, ich würde den Test mit einem Minimal-Programm (neue Anwendung) wiederholen.

                zur Frage 1: <br>
                Die SELECT-Abfrage besteht aus 3 Teilen: <br>
                1. SELECT x,y,z legt fest, welche Tabellenspalten zurückgeliefert weren sollen <br>
                2. FROM legt fest, aus welcher Tabelle diese Spalten stammen <br>
                3. WHERE legt fest, welches Selektionskriterium verwendet wird. <br>
                Im o.g. Beispiel liefert die SELECT-Abfrage nur die Datensätze zurück, die den gleichen Wert für CustNo verwenden wie der als Parameter übergebene Wert. Dank der VCL synchronisiert Delphi automatisch den Wert für CustNo mit dem aktuell im ersten DataSet ausgewählten Datensatzwert, solange die Spaltenbezeichnung in beiden Tabellen identisch ist.

                zur Frage 3: <br>
                Die Parameter-Deklaration hat Delphi automatisch angelegt (d.h. beim Speichern von <b>CommandText</b> wird die SELECT-Anweisung von Delphi analysiert und der Parameter automatisch erkannt und bearbeitet) und kann im Objektinspektor betrachtet/geändert werden. Ich habe die von Delphi eingerichtete Konfiguration ohne Änderung übernommen

                Comment


                • #9
                  ADOConnection ist auf Active gesetzt und bleibt auch aktiv währendessen. GUT? SCHLECHT? (ich glaube das das schlecht ist!)

                  <b>DIE LÖSUNG !!!!!!!</b>

                  Delphi muß geschlossen werden!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                  den sonst(vermute ich) greifen Delphi und meine Exe auf die Daten zu!!

                  <b>EINE FRAGE !</b>
                  Wenn ich gleichzeitig versuche das Programm auf meinen Rechner zu öffnen und auf einen anderen Rechner, bekommt der langsame die Fehlermeldung

                  Wieso ist das ganze nicht <b> MEHR </b> für mehrere Benutzer???

                  Comment


                  • #10
                    Was muß ich tun damit es netzwerkfähig wird

                    Comment


                    • #11
                      <p>Hallo Bine,<br>
                      <br>
                      Access ist vom Prinzip her keine Netzwerkdatenbank. Gleichwohl ist es möglich, dass mehrere Benutzer auf diese Zugreifen können. Dazu musst Du beim anlegen der MDB unter (ich hoffe in Access 2000 ist es noch genau so) "Ansicht" - "Optionen" - "Kategorie: Mehrbenutzerumgebung/ODBC" folgende Einstellungen machen:<br>
                      Standard bei Datensatzsperrung: <b>Bearbeiteter Datensatz</b>
                      Öffnungsmodus für Datenbanken: <b>Gemeinsame Nutzung</b><br>
                      <br>
                      Gruß Thomas</p&gt

                      Comment


                      • #12
                        <p>Hallo Bine,<br>
                        <br>
                        Access ist vom Prinzip her keine Netzwerkdatenbank. Gleichwohl ist es möglich, dass mehrere Benutzer auf diese Zugreifen können. Dazu musst Du beim anlegen der MDB unter (ich hoffe in Access 2000 ist es noch genau so) "Ansicht" - "Optionen" - "Kategorie: Mehrbenutzerumgebung/ODBC" folgende Einstellungen machen:<br>
                        <br>
                        Standard bei Datensatzsperrung: Bearbeiteter Datensatz<br>
                        Öffnungsmodus für Datenbanken: Gemeinsame Nutzung<br>
                        <br>
                        Gruß Thomas</p&gt

                        Comment


                        • #13
                          <p>Hallo Bine,<br>
                          <br>
                          Access ist vom Prinzip her keine Netzwerkdatenbank. Gleichwohl ist es möglich, dass mehrere Benutzer auf diese Zugreifen können. Dazu musst Du beim anlegen der MDB unter (ich hoffe in Access 2000 ist es noch genau so) "Ansicht" - "Optionen" - "Kategorie: Mehrbenutzerumgebung/ODBC" folgende Einstellungen machen:<br>
                          <br>
                          Standard bei Datensatzsperrung: <b>Bearbeiteter Datensatz</b><br>
                          Öffnungsmodus für Datenbanken: <b>Gemeinsame Nutzung</b><br>
                          <br>
                          Gruß Thomas</p&gt

                          Comment


                          • #14
                            Hallo Thomas!

                            Hab ein bißchen in Access2000 gestöbert aber das hab ich "noch" nicht gefunden, werd mal in der Hilfe nachschauen.

                            BINE :_

                            Comment


                            • #15
                              Also ich mußte auf Extras-optionen-weiter gehen

                              Dort gab es eine Auswahl Standard bei Datensatzsperrungen

                              <b> @) Keine Sperrungen</b> (Standard)

                              <b> @) Alle Datensätze</b>

                              <b> @) Bearbeteter Datensatz</b>

                              Ich habe das 3te gewählt

                              Nur bei dem Önnungsmodus weiß ich nicht was ich nehmen soll Standardmäßig ist er auf

                              <b> @)Freigeben gesetzt</b>

                              soll ich in auf

                              <b> @) Exclusiv setzen??</b>
                              &#10

                              Comment

                              Working...
                              X