Announcement

Collapse
No announcement yet.

Selectieren in Excel

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

  • Selectieren in Excel

    Ich brauche ein kleines Progrämmchen,mit dem ich in einer Excel-Tabelle<br>
    nach bestimmten Dingen suchen kann ( z.B. alle Maschinenteile mit Nr.X)<br>
    In einer Access-Datenbank macht man doch sowas über SQL-Abfrage.<br>
    Geht sowas auch mit einer Excel-Tabelle und wenn ja, wie?<br>
    Habe schon über ODBC eine Datenquelle angelegt, die auf diese Excel-Tabelle verweist,<br> aber in Delphi(3) hat dann die Table-Komponente zwar den DataBaseName aber keine Tabelle. So schein es also nicht zu gehen. <br>
    Hab da überhaupt keinen Plan, kann mir jemand helfen?<br>
    Bea

  • #2
    Hallo,

    in Excel muss man über <i>Einfügen | Namen | Definieren</i> einen <b>Namen</b> für diesen Bereich vergeben - dieser wird in Delphi als "Tabellen-Name" für die Datenbank (XLS-Datei) angezeigt

    Comment


    • #3
      Hallo,
      das hab ich schon so gemacht, aber ein "Tabellen-Name"steht mir in der Table-Komponente trotzdem nicht zur Verfügung.<br>An was könnte das noch liegen?
      Be

      Comment


      • #4
        Hallo,

        bei mir sind die folgenden Schritte erfolgreich: <br>
        1. Excel 2000-XLS: Name <b>DATEN</b> für den Tabellen-Bereich vergeben<br>
        2. Systemsteuerung | Datenquellen (ODBC): Benutzer-DSN für den <i>Microsoft Excel-Treiber 4.00.xx</i> mit dem Namen <b>Test</b> anlegen, XLS als Datei auswählen <br>
        3. SQL-Exporer/Datenbank-Explorer: Alias für den <i>Microsoft Excel-Treiber</i> anlegen und speichern <br>
        4. Alias erneut öffnen, in der Spalte <b>ODBC DSN</b> den Eintrag <b>Test</b> aus der Liste auswählen. <br>
        5. SQL-Explorer: Neu angelegten Alias öffnen, die Tabelle DATEN wird angezeigt und kann betrachtet werden

        Comment


        • #5
          Vielen, vielen Dank, hat einwandfrei geklappt.<br>
          Nun hab ich bei folgendem Schritt noch Probleme:<br>
          In meinem Programm habe ich eine DataSource, eine Query und ein DBGrid.<br>
          In der Query steht " SELECT * FROM DATEN " und im DBGrid werden alle Daten der Exceltabelle angezeigt. Das ist soweit ganz prima, aber ich kann die Datensätze ja nun nicht bearbeiten.<br>
          Deshalb hab ich statt der Query ein Table genommen.<br>Dort werden aber alle Felder außer der ersten Zeile mit dem Inhalt "(MEMO)" angezeigt<br> und nicht mit den tatsächlich drinstehenden Werten so wie bei der Query.<br>Was ist da nun noch zu beachten oder geht das Anzeigen der Exceltabelle dann nur über eine Query?<br>
          Danke schon mal Be

          Comment


          • #6
            Hallo,

            in der ersten Frage war nur davon die Rede, dass in einer EXCEL-Tabelle nach bestimmten Daten gesucht werden soll ;-)

            Was zeigt der <b>Feldeditor</b> an, wenn ein Doppelklick auf TTable gemacht wird und dann über die rechte Maustaste der Menüpunkt <i>Felder hinzufügen...</i> ausgewählt wird? Tauchen dort für die Excel-Spalten TField-Instanzen vom Typ <i>TStringField</i> auf und welche Breite haben diese?

            Generell ist es eine Frage des ODBC-Treibers, ob überhaupt Schreibzugriffe auf XLS unterstützt werden.

            Comment


            • #7
              Ich habe mich nun doch für eine Query-Komponente entschieden.<br>Das klappt soweit erst mal ganz gut.Aber ein Problem gibt es auch dort.<br>Die Original-Exceltabelle enthält unter anderem die Spalten Vertragsnummer und Auftraggebername.<br>Wenn ich mir diese Felder nach der Wandlung in eine Datenbank im Datenbankexplorer ansehe,<br>ist Vertragsnummer vom Typ double(15) und Auftraggebername vom Typ longvarchar(255).<br>Wenn ich nun über SQL nach Vertragsnummer selectiere geht das einwandfrei.<br>Die Selection nach Auftraggebername bringt jedoch nur SQL-Fehlermeldungen(z.B.2 Parameter erwartet,zu wenig Parameter)<br>Ich bin mir aber relativ sicher, daß die Select-Anweisung korrekt war.<br>Ich vermute, daß das an den Feldtypen liegt.Die kann ich aber auch nicht ändern.<br>Gibt es da noch einen Lösungsansatz oder sollte ich die ganze Sache einfach vergessen<br> und die Exceltabelle erst in eine Access-Datenbank konvertieren und damit dann die Selection und Anzeige durchführen?<br>Hätte nicht gedacht, daß das so umfangreich wird.<br>
              Danke schon mal<br>Be

              Comment


              • #8
                Hallo,

                mit <b>Delphi 5</b> und <b>ADO Express</b> wäre das überhaupt kein Problem, wie das folgende Beispiel demonstriert, das ohne ODBC-DSN auskommt und das vollständig im Objektinspektor konfiguriert wurde:
                <pre>
                object Form1: TForm1
                Left = 192
                Top = 107
                Width = 696
                Height = 480
                Caption = 'Form1'
                Color = clBtnFace
                Font.Charset = DEFAULT_CHARSET
                Font.Color = clWindowText
                Font.Height = -11
                Font.Name = 'MS Sans Serif'
                Font.Style = []
                OldCreateOrder = False
                PixelsPerInch = 96
                TextHeight = 13
                object DBGrid1: TDBGrid
                Left = 16
                Top = 104
                Width = 633
                Height = 120
                DataSource = DataSource1
                TabOrder = 0
                TitleFont.Charset = DEFAULT_CHARSET
                TitleFont.Color = clWindowText
                TitleFont.Height = -11
                TitleFont.Name = 'MS Sans Serif'
                TitleFont.Style = []
                end
                object DBNavigator1: TDBNavigator
                Left = 24
                Top = 80
                Width = 240
                Height = 25
                DataSource = DataSource1
                TabOrder = 1
                end
                object ADOConnection1: TADOConnection
                Connected = True
                ConnectionString =
                'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\TE' +
                'MP\TEST.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;J' +
                'et OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB' +
                'atabase Password="";Jet OLEDB:Engine Type=35;Jet OLEDBatabas' +
                'e Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:G' +
                'lobal Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet' +
                ' OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=F' +
                'alse;Jet OLEDBon'#39't Copy Locale on Compact=False;Jet OLEDB:Comp' +
                'act Without Replica Repair=False;Jet OLEDB:SFP=False'
                LoginPrompt = False
                Mode = cmShareDenyNone
                Provider = 'Microsoft.Jet.OLEDB.4.0'
                Left = 16
                Top = 24
                end
                object DataSource1: TDataSource
                DataSet = ADODataSet1
                Left = 80
                Top = 24
                end
                object ADODataSet1: TADODataSet
                Active = True
                Connection = ADOConnection1
                CursorType = ctStatic
                CommandText = 'select WertA, WertB from TESTDATEN'#13#10'where WertB like '#39'M%'#39
                Parameters = <>
                Left = 48
                Top = 24
                object ADODataSet1WertA: TWideStringField
                DisplayWidth = 20
                FieldName = 'WertA'
                Size = 255
                end
                object ADODataSet1WertB: TWideStringField
                DisplayWidth = 40
                FieldName = 'WertB'
                Size = 255
                end
                end
                end
                </pre>
                Dort gibt es keine Probleme, wenn eine SELECT-Abfrage mit einer LIKE-Einschränkung auf eine Spalte aufgerufen wird

                Comment


                • #9
                  Danke schön für ihre Hilfe,<br> leider konnte ich meinen Chef noch nicht zu Delphi 5 überreden.<br> Habe das Problem aber jetzt auch unter Delphi 3 lösen können.<br> Also Danke noch mal und meine nächsten Fragen kommen mit Sicherheit.<br>
                  Be

                  Comment


                  • #10
                    Und hier ist schon die nächste Frage!<br>
                    Habe mein Excel-Selection-Programm nun ferteig.<br>
                    Nun möchte ich es mit InstallShield fertig machen zur Übergabe.<br>
                    Dort hänge ich aber an einem bestimmten Punkt und weiß nicht, was ich dort auswählen muß.<br>
                    Also:In der Checkliste des 2. fettgedruckten Punktes (InstallShield-Objekte für Delphi wählen)gibt es "Fortgeschrittene Funktionen".<br>Dort klickt man "BDE" an.Ich möchte die gesamte BDE installieren.<br>Nun muß man einen Aliasnamen vergeben.<br>Jetzt kommt meine Frage.Was muß bei "Pfad" rein und vor allem was muß ich im Falle meiner Exceltabelle bei "Typ" auswählen.<br>Ich kann dort nichts mit Excel finden.<br>Ich hoffe, ich bekomme noch mal Hilfe und bedanke mich wie immer im Vorraus<br>Be

                    Comment


                    • #11
                      Hallo,

                      das wird so auf diesem Weg nicht funktionieren, da zuerst der <b>ODBC DSN</b> angelegt werden muss. Die BDE greift dann über den Alias im zweiten Schritt auf diesen bereits vorhandenen ODBC DSN zu. Wenn die komplette Konfiguration beim Setup-Programm automatisch ablaufen soll, kommt einiger Mehraufwand auf Sie zu. Die "Lite"-Version <i>InstallSHIELD Express für Delphi</i> bietet hier keine Unterstützung an, die "grossen" (kostenpflichtigen) Versionen aber schon.

                      P.S: Eventuell ist doch das Upgrade auf Delphi 5 + ADO Express die billigere Lösung ;-

                      Comment


                      • #12
                        Konnte meinen Chef nun überreden, doch auf Delphi5 umzusteigen.<br> Hoffe, dann lösen sich solche Problemchen von selbst.<br> Danke für Ihre Hilfe und Unterstützung.<br> Finde dieses Forum echt Spitze, weil man binnen kürzester Zeit eigentlich immer gleich kompetente Hilfe bekommt.<br> Also Riesenlob und tschüß erst mal bis zum nächsten Problem.<br>Be

                        Comment

                        Working...
                        X