Autor Beitrag
Moemmes
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 07.07.09 11:22 
Hallo zusammen,

ich habe ein kleines Problem beim Öffnen einer Access 2007 Datenbank aus meinem C# Programm heraus:

Vorab:
Ich habe eine Datenbank (Access 2007) in welcher ich ein VBA Macro geschrieben habe um auf das neue Anlagen-Feld in der accdb zugreifen zu können. Dieses Macro möchte ich von meinem C# Programm aus aufrufen.
Code:
ausblenden C#-Quelltext
1:
2:
3:
Access.Application myAccess = new Access.ApplicationClass();
myAccess.OpenCurrentDatabase("C:/DB/Databases/ST_DB/ST_DB.accdb"false"";);
RunMacro(myAccess, new Object[] { "TestAddRemoveAndSave", textBox1.Text



Die Procedur heißt TestAddRemoveAndSave und der Name der Datei, die in das Anlagenfeld abgelegt werden soll wird mit textbox1 übergeben.Der VBA Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Dim dbs As DAO.Database 
Dim rst As DAO.Recordset 
Const strTable = "tbl_emails" 
Const strField = "Attachment" 
' Attachment field in Table1 
Set dbs = CurrentDb Set rst = dbs.OpenRecordset(strTable, dbOpenDynaset, 0, dbOptimistic) 
' Add a new row and an attachment 
rst.AddNew 
AddAttachment rst, strField, strFileParam 
rst.Update 
rst.MoveLast 
rst.Close



Wenn ich die Datenbank per Code aus C# heraus öffne, dann wird sie immer als read only geöffnet und somit kann ich in der Db keine Daten mehr bearbeiten.Kann man mit C# Access auch als nicht read only öffnen und wenn ja wie, oder hat jemand eine Idee, wie man das auch anders lösen kann?

Grüße

Moemmes
PerryRhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34


C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
BeitragVerfasst: Di 07.07.09 13:52 
Hallo,

ich würde an Deiner Stelle eher über eine OleDbConnection laufen (www.connectionstrings.com). Ob Du damit jedoch VBA-Funktionen als Access-Stored Procedures ausführen kannst, wäre noch zu prüfen.

Grüße
PerryRhodan

_________________
C# im IRC: QuakeNet, Channel: #dotNet.de
Moemmes Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 07.07.09 15:02 
Danke schonmal für die Antwort. Daran habe ich auch schon gedacht, allerdings scheint dies nicht zu funktionieren bzw. ich finde nichts dazu.

Grüße

Moemmes
PerryRhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34


C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
BeitragVerfasst: Di 07.07.09 15:18 
Hallo,

das funktioniert definitiv, zumindest das Öffnen als reinen Datencontainer gegen den SQL abgesetzt werden kann. Wie das mit dem VBA-"Stored Procedures" ist, weiß ich an der Stelle selbst nicht.

Wichtig ist, dass die JET, über die Du laufen wirst um den Datenbankzugriff hinzubekommen, nur für die 32bit-Version zur Verfügung gestellt wird. Du musst also drauf achten, dass Deine .NET-Anwendung auf einem 64bit-System im 32bit-Teilsystem zur Ausführung kommt. Sonst meldet er "Provider not found" oder sowas in der Art.

Wenn Du nicht weiter kommst, paste halt mal Deinen Code zur Herstellung der Datenbankverbindung, dann können wir immer noch weitergucken.

Grüße
PerryRhodan

_________________
C# im IRC: QuakeNet, Channel: #dotNet.de
Moemmes Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 07.07.09 15:29 
Die Verbindung zur Datenbank mit Hilfe von OLEDB steht bereits und ich kann per SQL auch Daten aus der DB lesen und schreiben, allerdings weiß ich dann nicht, wie ich damit eine Datei in das Attachment-Feld von Access 2007 bekommen soll. Mein System arbeitet mit 32Bit also von daher schonmal kein Problem.

Gruß

Moemmes
PerryRhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34


C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
BeitragVerfasst: Di 07.07.09 21:22 
Hallo,

wenn Du da Dateien hinterlegen willst - was man tunlichst unterlassen sollte - dann würde ich das Feld als BLOB (Binary Large Object Bitmap) deklarieren und wie bei jeder anderen Datenbank füttern.

Vielleicht würde es helfen, wenn Du einfach mal beschreiben würdest, was eigentlich Zielsetzung ist.

Grüße
PerryRhodan

_________________
C# im IRC: QuakeNet, Channel: #dotNet.de