eine access datenbank verändern

Hallo,

kann mir jemand sagen, ob eine möglichkeit besteht in eine Access-Datenbak zu schreiben? bzw. in welcher datenbank kann werte verändern???

danke!
kann ich das folgende script irgentwie verwenden? damit kann ich bestimmt eine datenbank auslesen, oder? aber wie schreibe ich was in die "Bank"?

'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
Hallo WieHeisstDu,

du moechtest ueber Avenue in eine Datenbank schreiben. Das funktioniert bei einer ODBC-Connection in Form einer so genannten Transaction. Sieh dir hierzu am besten das Beispiel zu der Methode BeginTrans in der Klasse ODBCConnection an.

Gruss


Uwe
Von der DataBaseAccess-Extension (daher stammt das ODBCConnection-Objekt) würde ich die Finger lassen und besser dem guten alten SQLCon vertrauen. Mit der ExecuteSQL-Methode kann man auch schreibende Statemets ausführen.
> Von der DataBaseAccess-Extension (daher stammt das ODBCConnection-Objekt) würde
> ich die Finger lassen und besser dem guten alten SQLCon vertrauen.

dem kann ich nur zustimmen! SQLCon ist eine sehr schöne Methode, über die man die meisten sql-Befehle auf eine DB los lassen kann. Einzige Bedingung: In Windows muss eine odbc-Verbindung zur DB bestehen (über Systemsteuerung einzurichten)

Jörg
hallo,

ich bin euch echt dankbar für eure hilfe!!!

hab hier so ein script ausgegraben... kann ich das verwenden?

theSQL=SQLCon.Find("MeineODBCVerbindung")
theSQL.Login("user/password")
astring="Select * from table1"
theVTab=VTab.MakeSQL(theSQL, astring)
myTable=Table.Make(theVtab)
av.GetProject.AddDoc(mytable)
mytable.GetWin.Open
hallo hier Anonymous,

also, ich erstelle eine "Test.mdb" (access datenbank) und importiere diese in mein Arcview-projekt. ich kann diese tabelle aber nicht bearbeiten. was für ein script muss ich haben, damit ich was ich die datenbank schreiben kann? irgentwie hat alles andere nicht funktioniert... oder schnall ich da was nicht? ...HILFE...
Tabellen, die du über eine ODBC-Verbindung lädst, sind in jedem Fall readonly. Schreiben kannst du nur mit einem Script, daß explizit SQL-Statements absetzt.
Hallo,

Du kannst die Datenbanktabellen nicht mit den 'normalen' Editierfunktionen für Tabellen in AV verändern. Um Daten aus AV heraus zu verändern, musst Du per Avenue SQL-Befehle an die Datenbank schicken. Zum Beispiel:

Schreiben einer neuen Zeile in die vorhandene Tabelle 'wald' mit den Spalten ID und Flächengröße und Eintragen der ID = 6 und Flächengröße = 254

sqlString =
"INSERT INTO wald VALUES (6, 254)"
theSQLCon.ExecuteSQL(sqlString)
und wie muss dieses script aussehen?
:)
natürlich bin ich hier auch nur Gast :-)
habe ich, dneke ich beantwortet, während Du fragtest, oder?

Jörg
also brauch ich nur

sqlString =
"INSERT INTO wald VALUES (6, 254)"
theSQLCon.ExecuteSQL(sqlString)

in ein script zu schreiben und dann auszuführen? oder wo muss ich diesen sql-befehl einfügen?
ja, wenn Du vorher the SQLCon definierst wie in Deinem Beispielscript und wenn die Tabelle mit den entsprechenden Spalten vorhanden ist. Das Ausführen der Schreibaktion in der DB ist der einfache Teil. Vorher musst Du Dir i. d. R. den SQLString aus Benutzereingaben zusammenbasteln, d. h. Du brauchst Dialoge für die Benutzereingaben und Du musst dann mit Stringverarbeitung gültige SQL-Befehle kreieren.

Hier noch ein Tipp zu SQL, es gibt davon natürlich etliche:
http://www.w3schools.com/sql/

Jörg
ich hoffe, dass ich das jetzt hinbekomme...


danke!!! :)
Die Hoffnung stirbt zuletzt...

'n schönen Feierabend! Jörg
Moin!

ich krieg das irgendwie nicht auf die reihe... mein script sieht jetzt so aus:

theSQL=SQLCon.Find("schreibtest")
sqlString =
"INSERT INTO wald VALUES (6, 254)"
SQLCon.ExecuteSQL(sqlString)

wenn ich dieses ausführe, erscheint folgende meldung:

A(n) Nil objekt does not recognize request ExecuteSQL

ich habe eine access datenbank erstellt mit dem namen "wald" und zwei feldern, die "ID" und "Flaeche" heißen. hab dann in der Verwaltung eine ODBC Datenbank angelegt indem ich einen "Microsoft Access Treiber" genommen habe und dann eine datenbank auf d:\Test\sreibtest.mdb gewählt hab.
was mache ich falsch?
was meint Jörg mit: "vorher the SQLCon definierst wie in Deinem Beispielscript" und " Das Ausführen der Schreibaktion in der DB ist der einfache Teil. Vorher musst Du Dir i. d. R. den SQLString aus Benutzereingaben zusammenbasteln, d. h. Du brauchst Dialoge für die Benutzereingaben und Du musst dann mit Stringverarbeitung gültige SQL-Befehle kreieren."??? ich habe doch eine SQLCon. definiert und Posswort habe ich nicht definiert.
Hallo,

ich habe mal zu Betrieben die Koordinaten aus ArcView in eine
Access-Datenbank
mit folgendem Script geschrieben.

theView = av.GetActiveDoc
pt = theView.GetDisplay.ReturnUserPoint

x = pt.GetX
y = pt.GetY
x = x.setformat("d").asstring
y = y.setformat("d").asstring

p = MsgBox.input("Bitte vergeben sie eine Schlüsselnummer","Betriebsschlüssel","")
'if (p= nil) then
' MsgBox.error ("Sie müssen eine Schlüsselnummer vergeben!","Fehler")
' exit
'end

sqlString = "UPDATE BETRIEBE SET BETRS_RWERT = '"+x+"' , BETRS_HWERT = '"+y+"' WHERE BETR_SCHLUESSEL = '"+p+"';"


SQLCon.Find("Abwasserdatenbank").ExecuteSQL(sqlString)

av.FindDoc("Abwasser").GetVTab.Refresh

Vielleicht hilft dir das ja weiter...

Wobei "Abwasserdatenbank" meine ODBC-Verbindung ist.
und Abwasser war meine Tabelle aus der ich das Punktthema generiert hatte.
Hallo Gast,

Du schreibst
SQLCon.ExecuteSQL(sqlString)
und nicht
theSQL.ExecuteSQL(sqlString)

Deine SQLCon befindet sich in der Variablen theSQL. Daher die Fehlermeldung (die besagt, dass Du eine Methode ExecuteSQL auf ein Objekt anwendest, dass diese Methode nicht unterstützt (Gast, ignoriere das folgende, vielleicht kann mir diese Frage ja jemand anderes beantworten: wieso SQLCon als Avenue-Klasse ein nil-object sein soll ist mir alerdings schleierhaft))

Und, lieber Gast, ich habe den Eindruck, dass Du nicht so recht voran kommst, hast Du schon mal darüber nachgedacht, die Arbeit irgednwo (z. B. bei mir ;-) in Auftrag zu geben? Bei all der Tüftelei und den Fehlversuchen, ist das sicher die günstigere Alternative.

Viele Grüße, Jörg
nee, ich hab auch theSQL.ExecuteSQL(sqlString) geschrieben

sonst kommt die meldung is not an Avenue statement...
muss ich eigentlich folgendes davor schreiben?:

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

ich glaube nicht oder?
nein, das ist eine andere Baustelle, s. o. (anderer Gast, Gesendet: Okt 19, 2004 16:56:17).

> ich hab auch theSQL.ExecuteSQL(sqlString) geschrieben
dann liegt es daran, dass theSQL nicht ordentlich definiert ist. Gibt es denn in Deinem Windows die ODBC-Verbindung "schreibtest"?
ich habe auf jeden fall eine erstell, mit hinzufügen und dann auf "microsoft access treiber" dann "auswähelen" und auf D:\Test\schreibtest.mdb"

das programm schnallt es mit dem execute immer noch nicht, auch nicht bei deinem script... ich krieg langsam graue haare :)
und wie heißt die odbc-verbindung?
na "schreibtest" :)
kannst du dich im Menü Projekte -> SQL-Verbindung zur DB verbinden und Daten anzeigen lassen?

Gast (formaly known as Jörg Thomsen)
ja
nein doch nicht, nur unter "Add Database table"
> nur unter "Add Database table"
? habe das deutsche Menü, weiß jetzt nicht was das ist, wo steht's? Wähltst Du da die mdb-Datei oder die ODBC Verbindung aus?

> nein doch nicht
dann ist die ODBC-Verbindung nicht in Ordnung
"Add Database table" ist der zweite punkt über "SQL-Verbindung zu DB" also der dritte Punkt von unten... weißt du jetzt was ich meine???

>dann ist die ODBC-Verbindung nicht in Ordnung
was tun?
also ich hab mir so ein script hier gebaut, dass mit melden soll wenn ich keine Db hab:

theCon = SQLCon.find("schreibtest")
if (theCon=nil) then
msgbox.Error("gib es nicht", "Can't Connect")
exit
end


und rate mal was für eine meldung kommt... ...genau, "gibt es nicht"

so kann mir jemad mal eine genaue beschreibung geben machen bzw. genau beschreiben wie ich denn jetzt diese ODBC verbindung machen soll??? bitte schrittweise. damit die eventuelle fehleranalyse leichter ist. danke
> "gibt es nicht"
sach ich doch.

> so kann mir jemad mal eine genaue beschreibung

könnte ich, ist mir jetzt aber doch zu viel, google doch mal ein wenig zum Thema

Jörg
muss ich vielleicht eine genaue Pfadangabe machen???


z.B.: theCon = SQLCon.find("D:\Testdaten\schreibtest.mdb")
Du verwechselst hier ODBC-Datenquelle und mdb-Datei. Das ist etwas grundsätzlich verschiedenes! Wenn du im Windows-ODBC-Datenquellen-Administrator die ODBC-Datenquelle einrichtest, musst du einen Namen vergeben. Den braucht dann SQlCon.Find(...)
habs hingekriegt...

danke für eure hilfe!!! :)