Zum Inhalt springen

Olli_Master

Mitglieder
  • Gesamte Inhalte

    203
  • Benutzer seit

  • Letzter Besuch

Beiträge von Olli_Master

  1. Toller Tipp! Passend zum Thema und sehr hilfreich.

    Natürlich fehlt noch eine Fehlerbehandlung für ODBC-Runtime-Fehler. So ergibt sich dann der Rückgabewert. Außerdem müssten die vordefinierten Variablen in Funktionsparameter umgewandelt werden, damit die Funktion ihren Zweck erfüllt.

    Aber daum ging es gar nicht.

    Besser?

    
    'Verbindung zu einer Oracle 8.1.7 DB via ODBC
    
    Sub TestODBC()
    
    
    [...]
    
    
    End Sub
    
    

  2. Folgende Einstellungen funzen für Oracle ODBC 8.01.73 (8.1.7)

    Voraussetzungen:

    1. Du Hast Oracle Net8 auf deinem Rechner mit Verbindung zur Datenbank. Und natürlich die Oracle ODBC-Treiber.

    2. %ORACLE_HOME%\network\admin\tnsnames.ora enthält Eintrag für die Datenbank (ServiceName)

    3. Du kannst dich unter Verwendung dieses Namens mit der DB verbinden. (z.B. mt SQL-PLUS)

    ACHTUNG: Passwort muss pro Verbindung eingegeben werden (leider).

    
    'Verbindung zu einer Oracle 8.1.7 DB via ODBC
    
    Public Function TestODBC()
    
    
        'Deklaration
    
        Dim wrk As DAO.Workspace
    
        Dim con As DAO.Connection
    
        Dim rs As DAO.Recordset
    
        Dim sSQL As String, sServiceName As String, sConnect As String, sUserName As String
    
    
        'Parameter festlegen
    
        sUserName = "scott"
    
        sServiceName = "Hier Datenbankname/Servicename eingeben"
    
    
        'DSN muss angepasst werden:
    
        sConnect = "ODBC;DSN=ora_scott;UID=" & sUserName & ";DBQ=" & sServiceName
    
        sSQL = "select * from scott.emp"
    
    
        'Zuerst das Workspace
    
        Set wrk = CreateWorkspace("MyODBCWorkspace", "Admin", "", dbUseODBC)
    
    
        '==> Jetzt können wir die ODBC-Verbindung öffnen
    
        Set con = wrk.OpenConnection("MyConnection", , , sConnect)
    
    
        '==> Nun das Recordset öffnen
    
        Set rs = con.OpenRecordset(sSQL, dbOpenDynamic)
    
        Debug.Print rs.Fields(0), rs.Fields(1)
    
    
        'Und nun aufräumen
    
        rs.Close
    
        con.Close
    
        wrk.Close
    
        Set rs = Nothing
    
        Set con = Nothing
    
        Set wrk = Nothing
    
    
    End Function
    
    
    

    Alles klar?

  3. Schau dir mal die Access(97)-Hilfe zu den Themen Workspaces und Connections an. Die Beispiele sind recht hilfreich. Da wird meist unterschieden zwischen JET und ODBCDirect.

    Der erste Schritt:

    ' ODBCDirect Workspace-Objekt erstellen.

    Dim wrkODBC As Workspace

    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", "Admin", "", dbUseODBC)

    Der zweite Schritt:

    ' Connection-Objekt mit den zusätzlichen

    ' Informationen aus der Verbindungszeichenfolge

    ' öffnen. Wenn die Informationen unzureichend sind,

    ' sollte ein Fehler aufgefangen und nicht das

    ' Dialogfeld des ODBC-Treiber-Managers angezeigt

    ' werden.

    MsgBox "Connection1 öffnen..."

    Set conPubs = wrkODBC.OpenConnection("Connection1", dbDriverNoPrompt, , "ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

    Und hier wirds lustig - leider ist das Beispiel für SQL-Server. Für Oracle müssen spezielle Änderungen gemacht werden. Auf jeden Fall muss erst mal eine DSN angelegt werden. Eventuell muss in der fertigen Anwendung das Passwort bei der 1.Verbindung eingegeben werden.

    Hoffe das hilft.

  4. Bei Verwendung von Access --> Oracle liegen die Performanceprobleme hauptsächlich am ODBC-Treiber. Zumindest bei Oracle 8.0.x und früher. Ab 8.1 ist es besser geworden.

    Frage: Wenn du DAO benutzen möchtest, warum nimmst du dann Access als Frontend - so wie ich mir das vorstelle musst du dann auf die ganzen Access-Funktionalitäten verzichten und nur VBA-Code schreiben.

    [korrigiert mich, wenn das falsch ist]

    Soweit ich weiss ist es mit Access nicht möglich Remote-Tabellen unter Verwendung von DAO zu verknüpfen (von dem Installationsaufwand der Anwendung und der Inkompatibilität mancher Datentypen mal ganz abgesehen).

    Wäre VB ne Alternative? Da hat man die Wahl zwischen JET, ODBC, ADO / DAO.

    (Oder gleich Java + JDBC ...)

  5. Genau das gleiche Problem hatten wir auch vor ca. 2 Monaten. Wir haben diese "Reperatur" aber mit dem Norton DIsk Doktor gemacht - das ist zu spät.

    jetzt kann man nur noch retten was zu retten ist (kleiner Scherz)

    Wieviel jetzt noch in der Excel-Datei intakt ist hängt davon ab wieviel CHKDSK kaputt gemacht hat.

    -----

    Die Excel-Datei lässt sich meist in großen Teilen wiederherstellen.

    Dafür brauchst du ein Excel Recovery-Tool.

    Mit der "Demoversion" kannst du zumindest testen, ob die Datei noch Inhalte hat.

    (Aber vielleicht nützt dir das bereits etwas.)

    Leider kenne ich kein FreeWare Recovery-Tool.

  6. (Ich hab schon im Forum gesuch aber nix passendes gefunden!)

    Kennt jemand von Euch ein gutes Windows-Programm mit dem ich die aktuelle Bildschirmaktivitäten aufzeichnen und später wieder abspielen kann? (nicht als Überwachung!)

    Ziel ist es für eine Schulung bestimmte Programmaktivitäten aufzuzeichnen und bei einer Präsentation abzuspielen.

    Ideal wäre ein Freeware-Programm?

    Danke im Voraus

  7. 1. Schritt: Datei wiederherstellen

    ScanDisk nur im verwenden, wenn nichts anderes verfügbar ist - da geht sehr viel rettbares erst richtig kaputt. (Besonders ab WinNT aufwärts)

    Ich empfehle die Norton Disk Doktor.

    2. Schritt: Excel Datei wieder öffen (können!)

    --------

    Bei Fehler in der Excel-Datei:

    Meistens kann man danach die Excel-Datei aber nicht öffnen, obwohl große Teile noch in Ordnung sind. Dafür gibts spezielle Excel-Recovery Tools.

    Da habe ich mal sehr gute Erfahrung mit einem Tools namens "Excel-Recovery" (leider ShareWare) gemacht.

    --------

    Wenn es reicht die Daten der Excel-Datei (als Text) zu bekommen (keine Formatierung, keine Formeln usw.), dann geht es auch mit Bordmitteln von Excel. (Sehr versteckt in der Online-Hilfe)

    Wenn du mehr wissen willst, dann poste nochmal.

  8. > include-Datei kann nicht geoeffnet werden: 'dsutil.h': No such file or directory

    Dieser Fehler sollte eigentlich nicht kommen, wenn die Pfade richtig eingestellt sind. Ich glaube aber das diese Datei zu den samples gehört und von Hand eingetragen werden muss (normalerweise brauch man nur <dsound.h>)

    Der Pfad müsste "%sdk_install%\samples\common"

    sein, bin mir aber nicht ganz sicher.

    Am besten du lässt mal nach der Datei suchen.

    Als Nächstes müsstest du auch noch die dsound.lib einbinden um die Funktionen aus der zugehörigen DLL aufzurufen.

    Warum genau brauchst du DirectSound/DirectMusic.

    Wenn du wavs abspielen möchtest, dann macht sich wie o.g. PlaySound() ganz gut. Für MP3-Streams macht sich DirectShow (!) ganz gut (und einfach). Am besten du schaust dir die mitgelieferten Beispielprojekte mal an.

  9. >Daher ist mir ein Fehler aufgefallen: Frage 20: Nr.4 soll wohl

    >richtig sein, also für die gesamte Bevölkerung...

    Nicht nur die Kinder - was ist mit den ganz Kleinen:), den Schülern, den Studenten, den Arbeitslosen und den Hausfrauen?

    Was mit unseren Rentern ist, weiss ich nicht genau, aber ALLE ist auf jeden Fall quatsch da zu pauschal!

  10. Wir haben vor langer Zeit in der Berufsschule mal eine paar LEDs auf LPT1 ferngesteuert.

    Mit DOS/Turbo-Pascal ist das kein Problem - da konnte man direkt den Speicher auslesen.

    Dann haben wir versucht das ganze auf Windows98 bzw. NT umzusetzen. Da ging das nicht so einfach (NT unterbindet die direkten Speicherzugriffe.)

    Jemand in meiner Klasse hat aber eine mehr oder weniger funktionierende Lösung unter Verwendung von CreateFile(..) (Win32 API) gefunden.

    Damit kann man nämlich ach Schnittstellen ansprechen...

    Wir haben noch nach etlichen (!) anderen Lösungen gesucht, aber nichts gefunden.

    Vielleicht hilft dir CreateFile() weiter...

  11. Nachtrag: Solche Abfragen lernt man, wenn man Access den Laufpass gibt und eine richtiges Datenbanksystem verwendet. Bei SQL lernt man aber niemals aus...

    Wobei ich nicht sagen will, dass es ein perfektes System gibt - nur bessere und kompliziertere :)

  12. s2 ist nur ein Alias für die Tabelle statistics.

    Da wir ja eine Unterabfrage auf die gleiche Tabelle machen, so muss doch gesagt werden welche Felder er zum Vergleich nehmen soll. Mit dem Alias kann man das angeben. (Der Name ist egal - hätte auch irgendwie anders heissen können (z.B. stat2 oder nur stat).

    P.S.: Ich habe oben den Post nochmal aktualisiert. Wegen des TOP/BOTTOM - Problems. Das ist äußerst seltsam in Verbindung mit dem UNION (vollkommen zufällige Werte!!!)

  13. Jau, klar - warum schreibst du nicht das hier?

    Abfrage vQueryLastWeek

    
    SELECT describing.Title, describing.url, statistics.total, statistics.week
    
    FROM statistics INNER JOIN describing ON statistics.[url-nr] = describing.[url-nr]
    
    WHERE (((statistics.week)=(select max(week) from statistics s2 where s2.[url-nr]=statistics.[url-nr])));
    
    
    Das ist m.E. die erste Tabelle. (obwohl die Subquery im ersten Moment ein wenig unsinnig aussieht funktionierts bei meinen Beispieldaten...) Du sagst aber: "es gibt für jede url, für jede Woche eine totalnr" Wirklich? Warum musst du dann die Max_Woche je URL-Ermitteln? Der 2.Teil ist ein wenig komplizierter als zunächst angenommen: Abfrage vTOP10
    
    SELECT TOP 10 vQueryLastWeek.url, vQueryLastWeek.total, vQueryLastWeek.week
    
    FROM vQueryLastWeek
    
    ORDER BY vQueryLastWeek.total DESC;
    
    
    Abfrage vBOTTOM10
    
    SELECT TOP 10 vQueryLastWeek.url, vQueryLastWeek.total, vQueryLastWeek.week
    
    FROM vQueryLastWeek
    
    ORDER BY vQueryLastWeek.total;
    
    
    Abfrage vTB20
    
    SELECT * from VTOP10
    
    UNION
    
    SELECT * from VBOTTOM10 order by total desc
    
    

    Macht insgesamt 4 Abfragen: Pass auf, wenn du versuchen solltest die TOP10 und BOTTOM10 in eine UNION-Abfrage zu kombinieren - da kommen die ulkigsten Ergebnisse raus!!!

    So wars das?

  14. Kannst du bitte dein Ziel nochmal genau nennen.

    Zuerst schreibst du:

    "ich brauche die top und bottom 10 sites der jeweiligen letzen Woche."

    und dann:

    aber ich brauch ja ALLE Urls mit jeweiliger max.week und zugehöriger total,

    damit ichs auch noch für top 10 und bottom 10 sortieren kann

    --> Und warum dieses DISTINCTROW?

    ----------------

    Ich denke du willst:

    im 1. Schritt:

    Eine Zeile pro URL, mit

    -> "größter" bzw. letzte Woche

    -> Total für diese URL (Enthält die Anzahl der Seitenaufrufe?)

    Im 2. Schritt

    Nur die URL's von Schritt1, mit den Top 10 bzw. Bottom 10 im Feld Total.

    Und welche Woche möchtest du nun haben? Nur die letzte oder die jeweils letzte? Was passiert, wenn es zu einer URL keine "letzte" Woche gibt, weil sie nicht angeklickt wurde?

    Die TOP10/BOTTOM10 bziehen sich auf die Totals unabhängig von der Woche, oder? (wie sonst)

    Kannst du mal die fertige Ausgabe aufschreiben: (z.B.)

    (Top/Bottom10)

    URLxx 2000x Woche20

    URLxx 1800x Woche20

    ...

    URLxx 10x Woche19

    URLxx 5x Woche20

    IST DAS RICHTIG?

    (Das wäre ja eine Statistik, die ich selbst gefälscht hätte :-)

    Warum nimmst du nicht nur die URL's, die in der letzten Woche auch verwendet wurden. Dann wäre es eine saubere Statistik!

  15. ACH SO!

    Jetzt wirds etwas klarer. Wie wäre es mit einer SubQuery?

    
    SELECT describing.Title, describing.url, statistics.total, statistics.week
    
    FROM statistics INNER JOIN describing ON statistics.[url-nr] = describing.[url-nr]
    
    WHERE (((statistics.week)=(select max(week) from statistics)));
    
    

    Jetzt hast du ein Format á la (Title, Total, Week):

    Title1 250 25

    Title2 250 25

    ...

    Wobei die Woche der größte Wert aus der Tabelle Statistics über alle Datensätzte ist (nicht seitenbezogen)

    Das ganze nun als Abfrage Speichern und die o.g. Methode verwenden.

    ---

    Ich hoffe, ichs jetzt richtig verstanden!

  16. Die Antwort ist schon mal nicht schlecht.

    Worauf ich auch immer großen Wert lege:

    - gibt es ein existierendes System?

    Wenn ja: Schwachstellen, Probleme, Warum soll/kann die alte Anwendung nicht mehr genutzt werden.

    - zu erwartende Datenmengen

    - durchzuführende Auswertungen/Statistiken (insbesondere die bereits bestehenden!)

    - Wer soll wo, wann und warum mit dem Programm arbeiten. (Anzahl der Nutzer)

    - Ausfallsicherheit der DB-Anwendung (Datensicherung, usw.)

    - Welche Erweiterungen werden sich in naher Zukunft ergeben.

    usw.

    Man könnte noch tausend andere Sachen nennen - wichtig ist nicht nur das WAS sondern auch immer das WARUM!

  17. Kommt darauf an:

    Wenn du aber wirklich keine Ahnung von Datenbanken hast, dann solltest du darüber nachdenken, ob sich ein fertiges Inventarsystem nicht besser eignet.

    ansonsten:

    Wenn du unbedingt Delphi (? Version?) verwenden möchtest/musst und die mitgelieferten Datenbankfunktionen (TTable, usw.) verwendest, dann benötigt dein Projekt unbedingt die BDE (Borland Database Engine). Die muss dann auf dem Rechner installiert werden, auf dem die Anwendung ausgeführt wird. Die BDE bietet Möglichkeiten zum Datenzugriff auf verschiedene DBMS (Access/Paradox/Interbase usw.).

    ---

    Welche Datenbank sich eignet kann man nicht pauschal beantworten. Hängt ab von Nutzerzahl, Datenmenge usw.

    ---

    Für den Anfang (zum Ausprobieren) ist auf jedenfall Access zu empfehlen. Für ernsthafte, größere Anwendungen sollte man sich überlegen, ob ein richtiger Datenbankserver nicht sinnvoller ist (Oracle, DB2, *** SQL-Server). Mir ist nicht bekannt, ob man von Delphi aus auf freie Datenbanken (mySQL, etc.) zugreifen kann. Wenn das funktioniert, wäre eine kostengünstige Alternative.

    ---

    Für komplizierte Auswertungen ist Delphi nicht unbedingt geeignet (besonders wenn es viele sind und bei Bedarf noch neue hinzukommen).

  18. Deine Formulierung ist nicht ganz eindeutig.

    Ich vermute aber mal, dass du die 10 meistbesuchten und 10 am wenigsten besuchten URLs ausgeben willst. Und ich gehe davon aus das du in der Lage bist eine Abfrage mit folgendem Inhalt zu erstellen:

    URL Anzahl Woche/Datum/etc.

    xxxxx xxxxx xxxxxxxx

    xxxxx xxxxx xxxxxxxx

    xxxxx xxxxx xxxxxxxx

    Und davon möchtest du nun die TOP10/LAST10 Zeilen haben, bezogen auf die Werte im Feld Anzahl. Richtig?

    ==> Die ersten und letzten 10 musst du in jeweils eine Abfrage aufteilen:

    
    SELECT TOP 10 t.Wert
    
    FROM tabelle t order by Wert;
    
    
    
    SELECT TOP 10 t.Wert
    
    FROM tabelle t order by Wert desc;
    
    
    Wenn du dem "Access-SQL" mächtig bist, dann kannst du auch folgende Anweisung direkt eingeben:
    
    SELECT TOP 10 t.Wert
    
    FROM Tabelle t order by Wert desc
    
    union
    
    SELECT TOP 10 t.Wert
    
    FROM Tabelle t order by Wert 
    
    

    Aufpassen: Das Order By ist bei UNION-Abfragen sehr trickreich.

    Die SQL-Anweidung muss natürlich an deine Feldnamen angepasst werden.

    Hoffe das hilft.

  19. Ich zitiere folgenden Text aus der Online-Hilfe: (leicht gekürzt)

    
    Sub NeueAbfrage()
    
      Dim dbs As Database, qdf As QueryDef
    
    
      ' Bezug auf aktuelle Datenbank zurückgeben.
    
      Set dbs = CurrentDb
    
      ' QueryDefs-Auflistung aktualisieren.
    
      dbs.QueryDefs.Refresh
    
      ' Abfrage "LetzteEinstellungen" löschen, falls sie existiert.
    
      For Each qdf in dbs.QueryDefs
    
        MsgBox qdf.Name
    
      Next qdf
    
    
       Set dbs = Nothing
    
    End Sub
    
    

    Damit solltest du dann eine Kombobox füllen können.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...