Schrift
[thread]3829[/thread]

Zugriff auf MSAccess via CLI queries oder anderst?



<< >> 9 Einträge, 1 Seite
fraggs
 2007-07-12 17:23
#35562 #35562
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
wollte mal wissen ob dies geht sich einfach ueber das cli sich in die access datenbank einzuloggen und dann tabellen zu exportieren und durchsuchen zu koennen.

ich will zurzeit ein script schreiben um dies zutun hab bis jetzt noch keine wirkliche erfahrung mit access gehabt nur mit mysql und xml auswertungen.

war schon in der forum suche und hab ein paar wichtige infos gefunden zu welchen modulen ich brauche etc und ein bisschen beispiel code allerdings gelung es mir bis jetzt noch nicht mich in die datenbank richtig einzuloggen.

hier ist der jetzige code der auch aus einem sehr alten post im forum stammt zum einloggen

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
# 12/07/07 Stephan Becker
# test print fuer access datenbank

use strict;
use warnings;
use DBI;

my $mdb_file = "C:\090.1000.ATX_ATEX-RSM\Endmontage\Endmontage ATEX-RSM.mdb";
print " \n ";
my $connection_string = q{;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw};
print "--- $connection_string ---";
print " \n ";
my $cn = DBI->connect("dbi:ADO:Data Source=".$mdb_file.$connection_string, "");
print "--- $cn ---";
print " \n ";
my $alles = $cn->selectall_arrayref("");

foreach my $row ( @{$alles} )
{
print join (";", @{$row}), "\n";
}


und hier ist der error den ich leider bekomme
Quote
Illegal octal digit '9' ignored at dbatest1.pl line 9.


DBI connect('Data Source=C: 90.1000.ATX_ATEX-RSMndmontagendmontage ATEX-RSM.mdb;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw','',...) failed: Can't Open Connec
tion 'Data Source=C: 90.1000.ATX_ATEX-RSMndmontagendmontage ATEX-RSM.mdb;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw'

Package : DBD::ADO::dr
Filename : C:/Perl/site/lib/DBD/ADO.pm
Line : 153
Last error : -2147467259

OLE exception from "Microsoft JET Database Engine":

Das Microsoft Jet-Datenbankmodul kann die Datei 'C:\Perl Code\Access
Datenbank Abruf' nicht ÷ffnen. Sie ist bereits von einem anderen Benutzer
exklusiv ge÷ffnet, oder Sie ben÷tigen eine Berechtigung, um die Daten lesen
zu k÷nnen.

Win32::OLE(0.1707) error 0x80004005: "Unbekannter Fehler"
in METHOD/PROPERTYGET "Open" at dbatest1.pl line 13

Can't call method "selectall_arrayref" on an undefined value at dbatest1.pl line 15.


ich habe schonmal im inet nachgeschaut in sachen "Sie ist bereits von einem anderen Benutzer
exklusiv ge÷ffnet, oder Sie" ... die berechtigungen braucht man nicht weil es dort keine gibt. im inet wird gesagt das dies irgendwas mit dem dsn eintrag im odbc zutun haben koennte. allerdings bin ich da etwas confus da dies alles etwas neu fuer mich ist.

also mit der methode in line 15 mit dem selectall_arrayref will er ja das ganze array auswaehlen und dann spaeter in dem print dies ausgeben was darin steht. allerdings macht ers nicht.

Und ich denke das script scheitert an einer ganz bestimmten stelle, genau da wo der connection string definiert wird und wo hinten die verzeichniss angabe ist. denn bei mir gibt es keine system.mdw datei und weis auch nicht woher die kommen soll.

bedanke mich !\n\n

<!--EDIT|fraggs|1184247474-->
mmm twix
nepos
 2007-07-12 17:39
#35563 #35563
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, so wie ich das sehe, liegt das Problem schon in Zeile 9:
Code: (dl )
my $mdb_file = "C:\090.1000.ATX_ATEX-RSM\Endmontage\Endmontage ATEX-RSM.mdb";

Perl sieht da \090 als ungültige Oktalzahl.
Versuch mal, als Trenner statt \ / oder \\ zu nehmen.
fraggs
 2007-07-12 17:47
#35564 #35564
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
das hab ich mir auch gedacht aber hatte den gedanke schon abgelehnt ... mal schauen ob das einen unterschied macht allerdings glaube ich nochmehr das ich nicht die OLEDB system datenbank zuteilen kann da diese system.mdw nicht existiert

EDIT: so das ist beseitigt und zeigt jetzt auch den richtigen pfad der datenbank an. jetzt kommt das system.mdw problem ... und das mit den berechtigungen
Quote
--- ;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw ---
DBI connect('Data Source=C:\090.1000.ATX_ATEX-RSM\Endmontage\Endmontage ATEX-RSM.mdb;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw','',...) failed: Can't Open C
onnection 'Data Source=C:\090.1000.ATX_ATEX-RSM\Endmontage\Endmontage ATEX-RSM.mdb;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=C:\WINNT\system\system.mdw'

Package : DBD::ADO::dr
Filename : C:/Perl/site/lib/DBD/ADO.pm
Line : 153
Last error : -2147467259

OLE exception from "Microsoft JET Database Engine":

Sie haben nicht die n÷tigen Berechtigungen, um das Objekt
'C:\090.1000.ATX_ATEX-RSM\Endmontage\Endmontage ATEX-RSM.mdb' zu bearbeiten.
Bitten Sie den Systemadministrator oder die Person, die das Objekt erstellt
hat, Ihnen die entsprechenden Berechtigungen zuzuweisen.

Win32::OLE(0.1707) error 0x80004005: "Unbekannter Fehler"
in METHOD/PROPERTYGET "Open" at dbatest1.pl line 14
Use of uninitialized value in concatenation (.) or string at dbatest1.pl line 15.
--- ---
Can't call method "selectall_arrayref" on an undefined value at dbatest1.pl line 17.


EDIT: die system.mdw hab ich gefunden und das ist nun auch funktions faehig. $cn wird auch ausgedruckt allerdings noch in hash format nun scheitert der code allerdings am selectallarrayref

Code: (dl )
my $alles = $cn->selectall_arrayref("SELECT * FROM");


und welcher tabellen name muss hinter dem FROM angegeben werden ? der name von der ganzen tabelle ? oder von wo ?\n\n

<!--EDIT|fraggs|1184249548-->
mmm twix
nepos
 2007-07-12 18:41
#35565 #35565
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja, wie sieht deine Access-DB denn aus?
Hinter FROM gehört natürlich der Name der Tabelle, aus der du die Einträge lesen willst...
fraggs
 2007-07-12 19:03
#35566 #35566
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
absolut verwurschtelt und net von mir zusammen gebaut aber naja ich kenn mich mit access wie gesagt sogut wie garnicht aus. ich "denke" mal das der name der Tabelle einfach oben in dem kaestchen steht oder :rock:

hier ist ein screenshot der datenbank
http://i3.photobucket.com/albums/y89/fraggs/tabell...
also ich behaupte das die tabelle dann einfach Endmontage ATEX-RSM heisst oder ?
mmm twix
nepos
 2007-07-12 19:49
#35567 #35567
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm jo, würde ich auch so sehen, aber von Access hab ich auch keine Ahnung.
Ich denke, du wirst das dann entsprechend gequoted in den SQL-SELECT einbauen müssen:
Code (perl): (dl )
my $alles = $cn->selectall_arrayref(qq{SELECT * FROM "Endmontage ATEX-RSM"});


Ach ja und du solltest die Fehlerbehandlung nicht vergessen. Schau dir dazu mal die DBI-Doku an.
renee
 2007-07-12 22:10
#35568 #35568
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es gibt die Funktion quote_identifier, mit der der Tabellenname gequotet werden sollte.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2007-07-13 10:05
#35569 #35569
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Stimmt, das is noch sauberer :)
fraggs
 2007-07-13 11:26
#35570 #35570
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
also ist jetzt alles am laufen. undzwar gibt es bei access verschiedene kurz namen fuer tabellen formulare etc. .

zB. die tabellen heissen tblEndmontage und die formulare frmEndmontage.

werd mir ma diesen "quote_identifier" anschauen und auch die dbi doku durchlesen aber jetzt hab ich die query und gibt mir auch soweit alles zurueck was ich brauche jetzt gehts ans auswerten :rock:

der naechste post kommt bestimmt :p
mmm twix
<< >> 9 Einträge, 1 Seite



View all threads created 2007-07-12 17:23.