Moin Allerseits!
Möchte eine Abfrage aus einer Access DB über 'SQL-Verbindung' mit meinem apr verbinden. Nachdem alles fertig ist, und auch alles prima aussieht, das apr gespeichert und geschlossen ist, gibts dann den Ärger beim erneuten Öffnen. Und zwar gibts ne 'Segmentation Violation' und 'Das Projekt konnte nicht geöffnet werden' wenn das Projekt direkt (also durch Doppelklick aufs .apr) geöffnet wird. Wenn man es 'von Hand' öffnet (also über Datei->Projekt öffnen...) fragt er nach wo die DB geblieben ist.
Nach ein bisschen Rumgesuche hab ich ein Script zur vermeidung des ganzen gefunden (siehe Thema von Silke Struck weiter unten...), das macht auch das Nachgefrage beim Öffnen von Hand weg. Aber beim direkten Öffnen bleibt der Ärger!
Weiss jemand wie mensch das in den Griff bekommen kann?
Schonmal danke und schöne Grüße,
Emu
Möchte eine Abfrage aus einer Access DB über 'SQL-Verbindung' mit meinem apr verbinden. Nachdem alles fertig ist, und auch alles prima aussieht, das apr gespeichert und geschlossen ist, gibts dann den Ärger beim erneuten Öffnen. Und zwar gibts ne 'Segmentation Violation' und 'Das Projekt konnte nicht geöffnet werden' wenn das Projekt direkt (also durch Doppelklick aufs .apr) geöffnet wird. Wenn man es 'von Hand' öffnet (also über Datei->Projekt öffnen...) fragt er nach wo die DB geblieben ist.
Nach ein bisschen Rumgesuche hab ich ein Script zur vermeidung des ganzen gefunden (siehe Thema von Silke Struck weiter unten...), das macht auch das Nachgefrage beim Öffnen von Hand weg. Aber beim direkten Öffnen bleibt der Ärger!
Weiss jemand wie mensch das in den Griff bekommen kann?
Schonmal danke und schöne Grüße,
Emu
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Do., 07.10.2004 - 23:56
Permalink:-(
Gespeichert von Gast am Fr., 08.10.2004 - 07:20
Permalinkich hatte und habe hier ein ähnliches Problem; beim Umwandeln der mdb-Datei der LFU-Daten bin ich beinahe verzweifelt, vor allem, weil ich das ganze in ein Script gepackt habe. Und wenn man dann die apr wieder aufruft und bekommt ohwei-violation und das Script ist beim Teufel, dann wünscht man ArcView gleich hinterher. Am besten man setzt einen Preis auf die beste SQL-Access-Verbindung aus. Erster Preis : einmal den Programmierer dieser Verbindung verhauen dürfen...
Klaus
Gespeichert von Andreas am Fr., 08.10.2004 - 08:59
Permalinkzu der Thematik hab ich mal die Frage: das oben angesprochene Script über das Silke Struck geschrieben hat, habe ich auch erwartungsvoll ausprobiert und komme aber beim kompilieren des Scripts nicht weiter. Habt Ihr das gleiche Problem oder läuft das bei euch problemlos? Bei mir kommt folgende Meldung: "Unerkanntes Objekt: ODBCConnection". Scheint als Variable zu fungieren die nicht deklariert wurde???
Hier noch mal das Originalscript:
'Connection DB
'_____________________________________________________________________ ___________________
'ODBCConnection.SetErrorLogStatus(#ODBCERRORLOGGING_NONE)
'ODBCConnection.SetWarningsLogStatus(#WARNINGSLOGGING_NONE )
TheDB="c:\temp\test.mdb"
TheODBCConnectStr="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="+TheDB+";"
TheEncryptString = ODBCConnection.MakeEncryptConnectionStr (TheODBCConnectStr)
theCon = ODBCConnection.MakeWithConnStr (TheEncryptString)
if (theCon<>Nil) then
if (theCon.HasError) then
MsgBox.Error("Problem connection!","Error")
ODBCConnection.SetErrorLogStatus(#ODBCERRORLOGGING_DISPLAY)
ODBCConnection.SetWarningsLogStatus(#WARNINGSLOGGING_DISPLAY )
return nil
end
else
MsgBox.Warning("DB not found!","Warning")
return Nil
end
Andreas
Gespeichert von Gast am Fr., 08.10.2004 - 09:15
PermalinkGespeichert von Andre Steinhaeuser am Fr., 08.10.2004 - 10:12
Permalink>Das Projekt konnte nicht
>geöffnet werden' wenn das Projekt >direkt (also durch Doppelklick >aufs .apr) geöffnet wird
Diese Fehler kommt im allgemeinen dan, wenn irgendwo im Pfad/Dateinamen ein Leerzeichen ist. Öffnet man das Teil dann über Öffnen, dann findet er es. DIeser Fehler ist also nur durch das Vermeiden von Leerzeichen in Pfaden und Dateinamen (sollte man IMHO grundsätzlich so halten) verhindern.
Gruß
André
Gespeichert von Silke Struck am Fr., 08.10.2004 - 10:40
PermalinkNochmal zu dem Skript, das die Frage nach der Datenbank erübrigen sollte. Hab jetzt einen anderen Weg gefunden. Über Einstellungen > Systemsteuerung (> Verwaltung) > ODBC-Datenquellen öffnen. Bei Benutzerdatenquellen "Hinzufügen" wählen, dann den entsprechenden Access-Treiber, einen Namen und die gewünschte Datenbank auswählen. Bei der SQL-Verbindung in ArcView dann diese Benutzerdatenquelle verwenden. Dann kommt keine Frage nach der Datenbank mehr und das Skript wird überflüssig!
Grüße,
Silke
Gespeichert von Silke Struck am Fr., 08.10.2004 - 11:03
PermalinkNoch ein Nachtrag. Habe mittlerweile herausgefunden, dass das Skript der erste Teil eines längeren Skriptes ist, das eine Tabelle einfügt, so wie man es in ArcView auch über Project > "Add Database Table" machen könnte.
Hier das ganze Skript:
'Connection DB
'ODBCConnection.SetErrorLogStatus(#ODBCERRORLOGGING_NONE)
'ODBCConnection.SetWarningsLogStatus(#WARNINGSLOGGING_NONE )
TheDB="c:\temp\dbTest.mdb"
TheODBCConnectStr="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="+TheDB+";"
TheEncryptString = ODBCConnection.MakeEncryptConnectionStr (TheODBCConnectStr)
theCon = ODBCConnection.MakeWithConnStr (TheEncryptString)
if (theCon<>Nil) then
if (theCon.HasError) then
MsgBox.Error("Problem connection!","Error")
ODBCConnection.SetErrorLogStatus(#ODBCERRORLOGGING_DISPLAY)
ODBCConnection.SetWarningsLogStatus(#WARNINGSLOGGING_DISPLAY )
return nil
end
else
MsgBox.Warning("DB not found!","Warning")
return Nil
end
'create DBTable
theQuery = QueryDef.Make(theCon)
theQuery.SetSelectColumns({"Id","X","Y"})
theQuery.SetFromTables({"tblXY"})
theDBTable = DBTable.Make(theQuery)
theDBTable.SetName("XY table")
'update XY
theDBTable=av.FindDoc("XY table")
theQuery = theDBTable.GetQueryDef
'theQuery.SetSelectColumns ({"Id","X","Y"})
TheRSet=theQuery.OpenRecordSet
TheFldX= TheRSet.FindField("X")
TheFldY= TheRSet.FindField("Y")
if (TheRSet.Edit ("Id = 1")) then
TheRSet.SetValue(TheFldX, 3333)
TheRSet.SetValue(TheFldY, 4444)
TheRSet.Update
end
TheRSet.EndUpdate
TheRSet.Close
theDBTable.Refresh
Gespeichert von uwelangehh am Fr., 08.10.2004 - 11:43
PermalinkUnd wenn man dann die apr wieder aufruft und bekommt ohwei-violation und das Script ist beim Teufel
falls du damit meinst, dass das Script ganz und gar verloren sein sollte, so gibt es hierfuer folgende Loesung:
1. APR-Datei im Editor oeffen
2. ueber den Namen des Skriptes oder das Wort SCRIPT nach deinem Script suchen
3. innerhalb des Textes muss man dann lediglich \n durch ein Zeilenende ersetzen.
Viel Erfolg und Gruss
Uwe
Gespeichert von Gast am Fr., 08.10.2004 - 16:00
PermalinkGing ja richtig was los hier. Schönen Dank an alle die sich dazu Gedanken gemacht haben!
@ Gast:
Jo, die Database Access-Extention hab ich natürlich drinnen.
@ Andre Steinhaeuser:
Waren keine Leer- oder Sonderzeichen im Pfad, auch nix länger als 8 Zeichen.
@ Silke Struck:
Ja, funktioniert! Ist erstmal eine Lösung, obwohl nicht die 'eleganteste'. Wenn das ein ArcView-Bug ist, sollten doch die Esri-Leutz mal was für Ihr vieles Geld tun. Aber auf jedenfall recht vielen Dank!
Noch ne frage:
Warum bekomme ich auf dem umgekehrten Weg (also Shape.dbf in Access verknüpfen) immer eine Fehlermeldung, dass die Quelle nicht gefunden werden konnte, weil sie vermutlich nicht existiert? Was mache ich da falsch?
Schöne Grüße,
Emu
Gespeichert von uwelangehh am Fr., 08.10.2004 - 21:11
PermalinkACCESS erfordert glaube ich die Einhaltung der 8.3-Regel- max. 8 Buchstaben fuer den namen und max. 3 fuer die Extension -, auch wenn du eine Datei mit einem Namen laenger als 8 Buchstaben im Dateidialog auswaehlen kannst.
Gruss
Uwe.lange(at)db-gis.de
Gespeichert von Silke Struck am Di., 12.10.2004 - 15:53
PermalinkWenn ich die Database Access-Extension geladen habe, das obige Script kompiliere und die Fehlermeldung "Unbekanntes Objekt: ODBCConnection" kommt, was hab ich denn dann schon wieder falsch gemacht??
Silke
Gespeichert von uwelangehh am Di., 12.10.2004 - 17:49
Permalinkvielleicht funktioniert das Skript einfacher, wenn du eine SQL-Connection (SQLCon) verwendest. Siehe andere Datenbank-Diskussion.
Gruss
Uwe