000
16.04.2007, 20:37
Exec
|
hiho. ich hab mal wieder ein problem.
ich hab die folgende klasse:
class mdb { var $RS = 0; var $ADODB = 0; var $RecordsAffected; var $strProvider = 'Provider=Microsoft.Jet.OLEDB.4.0'; var $strMode = 'Mode=ReadWrite'; var $strPSI = 'Persist Security Info=False'; var $strDataSource = ''; var $strConn = ''; var $strRealPath = ''; var $recordcount = 0; var $ok = false; /** * Constructor needs path to .mdb file * * @param string $dsn = path to *.mdb file * @return boolean success */ function mdb( $dsn='Please enter DataSource!' ) { $this->strRealPath = realpath( $dsn ); if( strlen( $this->strRealPath ) > 0 ) { $this->strDataSource = 'Data Source='.$this->strRealPath; $result = true; } else { echo "<br>mdb::mdb() File not found $dsn<br>"; $result = false; } $this->RecordsAffected = new VARIANT(); $this->open(); } // eof constructor mdb() function open( ) { if( strlen( $this->strRealPath ) > 0 ) { $this->strConn = $this->strProvider.';'. $this->strDataSource.';'. $this->strMode.';'. $this->strPSI; $this->ADODB = new COM( 'ADODB.Connection' ); if( $this->ADODB ) { $this->ADODB->open( $this->strConn ); $result = true; } else { echo '<br>mdb::open() ERROR with ADODB.Connection<br>'.$this->strConn; $result = false; } } $this->ok = $result; return $result; } // eof open() /** * Execute SQL-Statement * @param string $strSQL = sql statement * @param boolean $getrecordcount = true when a record count is wanted */ function execute( $strSQL, $getrecordcount = false ) {
$this->RS = $this->ADODB->execute( $strSQL, &$this->RecordsAffected ); if( $getrecordcount == true ) {
$this->RS->MoveFirst(); $this->recordcount = 0; # brute force loop while( $this->RS->EOF == false ) { $this->recordcount++; $this->RS->MoveNext(); } $this->RS->MoveFirst();
} } // eof execute() function eof() { return $this->RS->EOF; } // eof eof() function movenext( ) { $this->RS->MoveNext(); } // eof movenext() function movefirst() { $this->RS->MoveFirst(); } // eof movefirst() function close() { @$this->RS->Close(); // Generates a warning when without "@" $this->RS=null; @$this->ADODB->Close(); $this->ADODB=null; } // eof close() function fieldvalue( $fieldname ) { return $this->RS->Fields[$fieldname]->value; } // eof fieldvalue() function fieldname( $fieldnumber ) { return $this->RS->Fields[$fieldnumber]->name; } // eof fieldname() function fieldcount( ) { return $this->RS->Fields->Count; } // eof fieldcount() } // eoc mdb von Peter Klauer
und benutze diese wie folgt:
require_once("inc/class_mdb.php"); //hier ist die klasse drin if(is_file($filename)) { $mdb = new mdb($filename); . . . } else echo "File not found.<br>"; und bekomme dabei folgenden fehler:
Fatal error: Cannot instantiate non-existent class: variant in /blabla/class_mdb.php on line 67 zeile 67 ist die folgende:
$this->RecordsAffected = new VARIANT(); mein filename ist gültig, denn is_file() gibt ja true zurück.
da ich hier mit meinem (eingeschränkten) wissen am ende bin, wende ich mich an euch. wäre nett, wenn ihr mir da weiterhelfen könntet. (bitte ruhig detailierter beschrieben)
danke euch! exec
--
"selbermachen rockt am meisten :D" - -LeJean-
|
|
Profil || Suche
|
001
17.04.2007, 13:19
scus
|
Ist denn die Klasse Variant irgendwo definiert? Wird die Datei (in der "Variant" drin ist) rechtzeitig eingebunden?
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
|
|
Profil || Suche
|
002
17.04.2007, 16:58
Exec
|
also die klasse wurde nicht von mir geschrieben und funktionierte auf meinem heimrechner auch 1a. das sollte auch auch eine standardfunktion sein (??)
von php.net ( http://de.php.net/manual/de/class.variant.php ) werd ich auch nicht schlauer.
--
"selbermachen rockt am meisten :D" - -LeJean-
|
|
Profil || Suche
|
003
17.04.2007, 17:50
Megge
|
eventuell läuft da eine alte version von php oder, was ich eher glaube: da läuft kein Windowsserver. VARIANT scheint für windows only gemacht zu sein, wenn ich mir das fenster links anschaue
# PHP Handbuch
# COM Support Funktionen für Windows
# com # DOTNET # VARIANT # com_ addref ...
--
|
|
Profil || Suche
|
004
17.04.2007, 18:23
Exec
|
mhm, das dachte ich mir bei dem linken fenster auch so :(
das erklärt u.a. warum es bei mir auf dem rechner funktioniert und online nicht. da muss ich mich mal auf die suche nach einer anderen klasse machen.
vllt kennt hier jemand sowas in der richtung? der umgang mit .mdb-dateien sollte mir die gesuchte klasse ermöglichen
--
"selbermachen rockt am meisten :D" - -LeJean-
|
|
Profil || Suche
|
005
17.04.2007, 20:14
hausi
|
Ich habe dafür auch mal gesucht. Ich kann dir nur einen Tipp geben: Vergiss es. Es gibt dafür prinzipiell 2 Lösungen: 1. ODBC over TCP (z.B. mit ODBC Sock) und damit auf einen Windows-Server, auf dem die DB läuft. Geht prinzipiell problemlos, allerdings kannst du dann auch gleich alles auf dem Windows Server laufen lassen und somit eine weitere Abstraktionsschicht und Fehlerquelle beseitigen. 2. mdbtools mit ODBC-Treiber für Linux installieren. Das Ding ist im Moment in etwa so weit, dass es ganz einfache SELECT-Statements beherscht, sowie natürlich UPDATE, DELETE und INSERT. JOINs, Bedingen auf Felder ohne Index und das meiste andere ging zumindest damals, als ich das ausprobiert habe (vor etwa 6 Monaten) nur sehr schlecht oder gar nicht. Eine weitere Möglichkeit habe ich zumindest damals auch mit intensiver Suche nicht gefunden.
--
Dieser Beitrag wurde am 17.04.2007 um 20:15 von hausi bearbeitet.
|
|
Profil || Suche
|
006
17.04.2007, 20:31
Exec
|
uh. meine google-suchen haben da auch nicht mehr ergeben :( das ist natürlich total suboptimal.
da muss ich mir was einfallen lassen, denn umsteigen auf ein anderes format geht nicht und ein windows-server hab ich auch nicht zur verfügung.
*e* ich schildere mal das problem: - ich bekomme von einem programm eine .zip (passwortgeschützt) exportiert, die bilder + eine .mdb enthält. - die .mdb enthält datenfelder, die ich auslesen muss (mh, logisch) um den inhalt auf einer website widerzugeben.
was steht mir zur verfügung: - webspace mit datenbanken, etc. unter linux - bürorechner unter windows
idee: - ich könnte xampp auf dem bürorechner installieren und von dort aus die datenbank entsprechend updaten (wie auch immer? lösungen?).
--
"selbermachen rockt am meisten :D" - -LeJean-
Dieser Beitrag wurde am 17.04.2007 um 21:30 von Exec bearbeitet.
|
|
Profil || Suche
|
007
17.04.2007, 22:05
hausi
|
Naja, wenn du nur die DB auslesen musst, funktioniert das mit den mdbtools problemlos. Ein einfaches SELECT * FROM table geht natürlich ohne Probleme. Sonst gibts natürlich auch genügend Lösungen, das anders zu machen, wenn keine Echtzeitverarbeitung notwendig ist. Z.B. indem du auf dem Server ein Verzeichnis für die zu verarbeitenden DBs anlegst, vom Bürorechner per scheduled task ein Script aufrufst, welches diese herunterlädt, auswertet und die Resultate direkt in die andere DB einträgt, oder in einem anderen Format (xml) wieder auf den Server lädt.
--
|
|
Profil || Suche
|
008
17.04.2007, 22:16
Exec
|
so wie ich das sehe, muss ich die mdbtools ja erst installieren, und das fällt flach :(
bearbeiten muss ich die .mdb's garnicht, sondern nur auslesen.
--
"selbermachen rockt am meisten :D" - -LeJean-
Dieser Beitrag wurde am 17.04.2007 um 22:18 von Exec bearbeitet.
|
|
Profil || Suche
|
009
17.04.2007, 22:21
oxff
|
Use the source, Luke.
Saug dir den Source von mdbtools, guck dir das Parsing in C an und Porte das nach PHP.
--
mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik
|
|
Profil || Suche
|
010
18.04.2007, 05:39
Alcapone
|
Nur mal so ne vermutung:
Kann das sein, das er mit den Eingangsparametern des Konstruktors nicht zufrieden ist?
<?php function mdb( $dsn='Please enter DataSource!' ) ?>
Solle da nicht drinnen stehen mdb($dsn) oder mdb(var $dsn)?
/edit:
Hab mir das nochmal durchgelesen und frage mich wo die Klasse VARIANT herkommt. Insofern Verweise ich auf den Post weiter oben, in dem dieser Punkt schon angesprochen wurde. Am Konstruktor wirds wohl weniger liegen...
--
"Everything, that can go wrong, will go wrong" Murphy's Law
Dieser Beitrag wurde am 18.04.2007 um 05:48 von Alcapone bearbeitet.
|
|
Profil || Suche
|
011
18.04.2007, 08:47
Exec
|
wie gesagt, unter xampp auf meinem xp-rechner funktioniert das ja alles 1a. die klasse hab ich irgendwo her (www.ingoknito.de) und wurde von mir nicht verändert. variant() sollte dabei ein standardbegriff sein (aber nur unter windows).
--
"selbermachen rockt am meisten :D" - -LeJean-
Dieser Beitrag wurde am 18.04.2007 um 08:48 von Exec bearbeitet.
|
|
Profil || Suche
|