PDA

Vollständige Version anzeigen : FileDialog Fehler


Mattes
24.09.2002, 12:58
Hallo Forum,

ich versuche ein Modul aus der knowhow3.mdb, auf die der gute donkarl in seinem FAQ 3.1 verweist auf XP umzuschreiben.

Der Code soll mit Hilfe eines FileDialogs FE und BE verbinden. Diese Problematik wurde hier auch ja schon oft disskutiert.

Leider bekomme ich folgende Fehlermeldung:

Benutzerdefinierter Typ nicht definiert.
Der Debugger bleibt in folgender Zeile stehen:
Dim fd As FileDialog
Wie muß diese Anweisung unter xp lauten oder welche Verweise muß ich vielleicht noch setzen?

Nouba
24.09.2002, 13:12
Der Verweis auf MS Office Biblithek fehlt.

Mattes
24.09.2002, 13:33
Hi Nouba,

habe den fehlenden Verweis gesetzt (MS Office 10.0 Libary)

Trotzdem kommt noch eine Fehlermeldung:
Unzulässige Verwendung des Schlüsselworts New.

Hier der Code im Original. An dem habe ich jetz noch nichts geändert:


Dim DB As Database
Dim newdb As String
Dim Nix As Integer
Dim I As Integer, countfrm As Integer
Dim frm As Form
Dim fd As New FileDialog
Dim startdir As String
Dim StBeschriftung As String
Dim X As String

On Error GoTo Error_switchConnect
startdir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Dir(CurrentDb.Name)))
If Right(startdir, 1) <> "\" Then startdir = startdir & "\"
StBeschriftung = "Daten suchen"
If Len(startdir) > 0 Then
Do
X = Right(startdir, 1)
If X = "\" Or Len(startdir) = 0 Then
Exit Do
End If
startdir = Left(startdir, Len(startdir) - 1)
Loop
Else
startdir = "C:\"
End If

With fd
.DialogTitle = StBeschriftung
.InitDir = startdir
.Flags = OFN_FILEMUSTEXIST Or OFN_PATHMUSTEXIST
.Filter1Text = "MDB-Dateien (*.mdb)"
.Filter1Suffix = "*.mdb"
.Filter2Text = "MD?-Dateien (*.md?)"
.Filter2Suffix = "*.md?"
.Filter3Text = "Alle Dateien (*.*)"
.Filter3Suffix = "*.*"
.ShowOpen 'oder .ShowSave
End With

newdb = fd.FileName
If Len(newdb) > 0 Then
' Wenn Datenbank verbunden
'Alle Formulare aktualisieren
'Dazu alle Formulare merken und schliessen
countfrm = Forms.count
If countfrm > 0 Then
ReDim merkform(countfrm) As String
For I = 0 To countfrm - 1
Set frm = Forms(I)
merkform(I) = frm.Name
Next I
For I = 0 To countfrm - 1
Nix = frmClose(merkform(I))
Next I
End If

'Datenbank neu verbinden
Set DB = DBEngine.Workspaces(0).Databases(0) 'Für eigene Datenbank
If Not ConnectDB(DB, newdb) Then
Nix = MsgBox("Tabellen konnten nicht ordungsgemäß verbunden werden ", vbCritical, "Fehler beim Verbinden")
Exit Function
End If

'Alle Formulare wieder öffnen
For I = 0 To countfrm - 1
Nix = frmOpen(merkform(I), vbNormal)
Next I
'Else
' Fehler
End If

Exit Function

Nouba
24.09.2002, 13:43
erscheint der Fehler auch, wenn Du wie folgt vorgehst?Dim fd As FileDialog
...
Set fd = New FileDialog

gruss nouba

genschman
24.09.2002, 13:43
Hallo Mattes,
nur so 'ne Vermutung:
´hast Du auch aus der "KnoffHoff.mdb" das Klassenmodul FileDialog mit übernommen und die dort beschriebene Vorgehensweise befolgt?

<img src="graemlins/idee.gif" border="0" alt="[Idee]" />

genschman

Mattes
24.09.2002, 13:59
@Nouba:

Fehler bleibt

@ Genschman:

ääh <img src="graemlins/unschuldig.gif" border="0" alt="[unschuldig]" /> Klassenmodul? Was muß ich denn da noch übernehmen und wie?
Ich denke Deine Vermutung trifft ins Schwarze

genschman
24.09.2002, 14:05
in der "KnowHow.mdb" ist im Register Module ein Modul, das FileDialog heisst und die Typenvereinbarung beinhaltet. Da ist unter anderem auch beschrieben, was passiert, wenn dieses Modul fehlt: dann kommt nämlich diese Fehlermeldung bei Dim fd As New FileDialog
Das Modul sollte übrigens mit AXP ohne Änderung laufen, bei A2K geht es 100%.

genschman

Mattes
24.09.2002, 14:08
... brauch nochmal Hilfe. Das Modul steht unter Klassenmodule in der Knoff-Hoff.

In meiner DB gibt es (noch) keine Klassenmodule. Ist das erste Mal das ich mit sowas arbeite.

Wie muß ich vorgehen um das Klassenmodul FileDialog in meine DB zu importieren?

Danke für Eure Mühe

genschman
24.09.2002, 14:26
Zitat aus dem Klassenmodul "FileDialog":
_________________________________________________
'Diese Datei enthält ein Klassenmodul zum Aufruf des
'Standard-Windows Datei öffnen/speichern Dialogs.
'
'Damit werden die API-Funktionen
' GetOpenFileNameA
' GetSaveFileNameA
'gekapselt und programmiererfreundlich verpackt.
'
'Die gleiche Funktion erhält man auch mit dem OCX
'von Microsoft (comdlg32.ocx), das kann zusätzlich
'Farben-, Schrift- und Druckereinstellungen (nein,
'nicht den Drucker wechseln). Stürzt aber öfter
'ab, ist groß, braucht einen Verweis, ... naja.
'Jedenfalls habe ich die Eigenschafts- und Methoden-
'namen von da geklaut, so daß man das Ding mit meinem
'Klassenmodul problemlos austauschen kann.
'
'
'Kurze Bemerkung zu Klassenmodulen:
' Obwohl Klassenmodule wie ganz normale Module
' in der Modul-Liste erscheinen, haben sie eine
' andere Funktion.
'
' 1.) Sie besitzen eigene Methoden und Eigenschaften
' und können im Code wie ganz normale Objekte
' (z.B. Steuerelemente) angesprochen werden.
'
' Dabei ist der NAME (!!) des Klassenmoduls der
' Typ des Objekts. Beispiel: Das Klassenmodul in
' dieser Demo heißt 'FileDialog', mittels
'
' Dim fd As New FileDialog
'
' wird ein neues Objekt dieser Klasse erzeugt.
'
' Wenn jetzt jemand auf die Idee kommt und das
' Klassenmodul in 'HumphreyBogart' umbenennt,
' muß der Code in
' Dim xy As HumphreyBogart
' geändert werden. Dann hätte HumphreyBogart
' die Eigenschaften .DefaultFileName, DialogTitle, ...
' Naja, lassen wir das.
'
' 2.) Weil es eben keine normalen Module sind,
' funktioniert bei der Übernahme in eigene Anwendungen
' ein einfaches Cut'n Paste nicht. Auch speichern
' als Text und Einfügen in ein normales Modul funktioniert
' nicht, man bekommt die Fehlermeldung:
' "Benutzerdefinierter Typ nicht definiert"
'
' Die Übernahme in eigene Anwendungen funktioniert auf
' zwei Arten:
' a) Importieren aus dieser Demo (Datei->Externe Daten->
' Importieren)
' b) Erstellen eines neuen Klassenmoduls (Einfügen->
' Klassenmodul) und pasten des Codes. Hierbei ist
' das Benennungsproblem von oben zu beachten.
'
' Tip: Klassenmodule haben auch ein anderes Icon, daran
' kann man ganz gut sehen, ob man es richtig importiert
' hat.

__________________________________________________

besser könnte ich es auch nicht erklären

<img src="graemlins/biggrinlove.gif" border="0" alt="[biggrinlove]" />

Mattes
24.09.2002, 14:55
... das hab ich übersehen. So gemacht wie beschreiben, und siehe da: Klappt! :D

Danke für Eure Hilfe

Mattes
30.09.2002, 20:40
So ein Scheiß!

ich verzweifel gerade. NAchdem das alles funktioniert hat, hab ich die DB zerschossen. Hab diese jetz wieder "zusammenkopiert und importiert".

Seitdem erhalte ich immer die Fehlermeldung "Tabellen konnten nicht ordnungsgemäß verbunden werden!"

Die mdb läuft. Bei der Aufteilung in FE und BE kommt zwar der FileDialog beim ersten öffnen des FE, wenn ich dann aber Die Daten-mdb auswähle kommt o.a. Fehlemeldung.

Verweise und deren Reihenfolge sind wie in der alten DB.

Wie bekomme ich raus wodran das liegt????

genschman
01.10.2002, 09:09
Hallo Mattes,

hast Du auch dieselbe Anzahl Tabellen mit denselben Tabellennamen wie vorher?
Die Fehlermeldung kommt eindeutig aus dem Modul mdlVerbinden. In der Funktion ConnectDB sind alle Tabellennamen aufgeführt, die zum Verbinden gesucht werden.
Andere Verweise dürften deshalb bei der Fehlerursache keine Rolle spielen.
Vielleicht ist auch die Daten-DB defekt. Versuche doch mal, eine DB zu erzeugen, die alle erforderlichen Tabellen leer enthält (ich weiss ja nicht, wieviel das sind :D ) und die dann einzubinden.

good luck

genschman

Mattes
01.10.2002, 10:54
Hi Genschman,

ich babe mitlerweile mehr Tabellen. Habe die Const maxtables auf 18 gesetzt weil ich insgesamt 19 Tabellen habe (Tabels(0) - Tabels(18)).

Alle Tabellen sin hardgecoded eingegeben, die Namen stimmen auch.

Ich probiers heute Abend nochmal. Darf ich Dich al direkt anmailen falls ich es nicht hinkriege?

A.S.
01.10.2002, 11:02
Hi Mattes,

bitte den Thread im Forum halten und nach Möglichkeit nicht "nach außen" verlegen, damit diejenigen die nach Dir auf das Problem stoßen, Anhaltspunkte zur Lösung vorfinden!

Besten Dank im voraus.

genschman
01.10.2002, 11:06
kein Problem, Antwort ist dann aber erst morgen früh ab ca. 06.00 Uhr möglich.
Die Anzahl 18 für MAXTABLES sollte auch stimmen, da die Schleife von 0 bis 18 läuft und das sind nun mal 19 :D

pocki
01.10.2002, 13:20
Hi, Gemeinde,

noch ein Beitrag. Ich habe das Klassenmodul aus der KnowHow.MDB seit ACC97 in Verwendung. Die Konvertierungen nach ACC2000 bzw. ACC-XP laufen problemlos. Habe mittlerweile dieses Modul auch unter ACC-XP ohne Problem am laufen. Allerdings habe ich aus dem Klassenmodul die BrowseInfo entfernt mit den dazugehörigen Prozeduren, weil bei Dr. MOF eine bessere Version für die Pfadwahl vorhanden ist.

Wie gesagt, Filedialog richtig eingefügt und verwendet, sogar mit Multiselect, funzt auch unter ACC-XP einwandfrei.

Gruß

Pocki

Mattes
01.10.2002, 18:52
... Asche auf mein Haupt.

Wenn man neue Tabellen einbindet sollten die auch vorhanden sein. Ihr wisst ja wie das ist, manchmal sieht man den Wald vor lauter Bäumen nicht. <img src="graemlins/weinen.gif" border="0" alt="[weinen]" />

Ich hab die Tabellen zigmal durchgezählt, Namen verglichen etc. Eine hat gefehlt! Das hab ich erst heute bemerkt.

Drüber schlafen und nicht in Hektik verfallen hilft eben auch manchmal!

Läuft unter XP einwandfrei. Danke nochmal für Eure Hilfe.

@genschman:
Tut mir leid wenn ich zu sehr genervt habe! War die nackte Panik! :D
<img src="graemlins/top.gif" border="0" alt="[Finger hoch]" />

@Arno:
Der direkte austausch verhindert manchmal unnötige Postings und Rückfragen. Ich stelle die Lösung immer ins Forum. Ehrlich! <img src="graemlins/unschuldig.gif" border="0" alt="[unschuldig]" />

Im Prinzip hat Du natürlich Recht!

[ 01. Oktober 2002: Beitrag editiert von: Mattes ]</p>

A.S.
01.10.2002, 20:16
Hallo Mattes,

ich glaub den <img src="graemlins/unschuldig.gif" border="0" alt="[unschuldig]" /> -Schein hast Du Dir aber nicht gerade verdient! <img src="graemlins/nene.gif" border="0" alt="[Nein Nein]" /> :p

Wie sieht's denn mit den Ergebnissen hierfür aus? :

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=74663" target="_blank">Darstellung eines Zeitraums per Balken</a>
<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=76170" target="_blank">Monatübergreifenden Zeitraum von verschiedenen Monaten abziehen</a>
<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=75150" target="_blank">Registersteuerelement formatieren</a>
<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=76492" target="_blank">Berichte formatieren</a>

Das mit den Ergebnissen gilt im übrigen nur in beschränktem Maße für Dich ;) In wesentlich größerem Maße sollte sich hier manch anderer Benutzer angesprochen fühlen.

BTW Ich habe mich jetzt 'ne halbe Stunde durch Deine diesjährigen Beiträge gewühlt und unter Deinen ca. 10 - 15 eigenen Anfragen die da oben gefunden, wo meines Erachtens die Lösungen noch offen sind ;) ;) Da Du dieses Jahr nur < 10 % Deiner Gesamtbeiträge verfaßt hast, hatte ich keine Lust noch das Archiv durchzuwühlen ;) ;)

Gruß

Arno

Mattes
01.10.2002, 20:50
<img src="graemlins/entsetzt.gif" border="0" alt="[entsetzt]" /> Sollte ich die echt vergessen haben?

Aber mal ehrlich 4 von 711 is nich soooo schlecht. :D


also:
zu
<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=76170" target="_blank">Monatübergreifenden Zeitraum von verschiedenen Monaten abziehen</a>
Dieser Kelch ging an mir vorüber.

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=74663" target="_blank">Darstellung eines Zeitraums per Balken</a>
war mir zu peinlich. Kurt hat natürlich Recht.

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=75150" target="_blank">Registersteuerelement formatieren</a>
Coole Seite. Habs' noch nicht umgesetzt.

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=76492" target="_blank">Berichte formatieren</a>
ICh wollte Nouba das nicht zumuten. Er hat mir so oft geholfen! Das Problem habe ich umschifft, aber nciht gelöst..

Fazit:
.... HAST JA RECHT :grins: