Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
16.04.2007, 20:37
Exec



hiho.
ich hab mal wieder ein problem.

ich hab die folgende klasse:
Quellcode: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:
Quellcode: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:
Quellcode:Fatal error: Cannot instantiate non-existent class: variant in /blabla/class_mdb.php on line 67 zeile 67 ist die folgende:
Quellcode:$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-

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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-

zum Seitenanfang zum Seitenende 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

Zitat:
# PHP Handbuch

# COM Support Funktionen für Windows

# com
# DOTNET
# VARIANT
# com_ addref
...

--

zum Seitenanfang zum Seitenende 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-

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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.

--

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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-Quellcode:<?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.
zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende Profil || Suche