Kirjautuminen

Haku

Tehtävät

Koodit: PHP: ODBC, Excel-tietokanta

Kirjoittaja: MtJ

Kirjoitettu: 09.08.2004 – 09.08.2004

Tagit: kirjaston käyttö, koodi näytille, vinkki

Scripti ottaa yhteyden excel-kantaan, lukee excelistä rivit ja sen jälkeen sulkee yhteydet. Homma toimii myös muilla kuin excel-tiedostoilla; kaikki odbc-yhteydet toimivat samalla tavoin.

<?php
//************ ODBC-yhteys exceliin **********************
// Luonut MtJ / 9.8.2004

// Testattu toimivuus näillä versioilla:
// PHP 5.0
// Apache 1.3
// IExplore 6.0.2800.1106

// Huomaa! Excel käyttää sarakeniminä ensimmäistä
// taulun/sheetin riviä! Eli ensimmäiselle riville
// kannattaa sijoittaa esimerkiksi a,b,c,d,e,f,g,h,i...jne.
// jotta ekaa riviä ei käytetä sarakeniminä. [MJ]



// Lukeminen excelissä:

// Huomioi "defaultdir" on "oletushakemisto", jossa
// tiedostot sijaitsevat [MJ]
$lahdeTied = "tiedosto.xls"; // excel-tiedoston nimi, laita tähän myös polku jos tiedosto ei ole oletushakemistossa
$SystemDSN = "DRIVER={Microsoft Excel Driver (*.xls)};
              DBQ=".$lahdeTied.";
              UserCommitSync=Yes;
              Threads=3;
              SafeTransactions=0;
              PageTimeout=5;
              MaxScanRows=8;
              MaxBufferSize=2048;
              DriverId=281;
              DefaultDir=C:\Program Files\Apache Group\Apache\htdocs";

$UserName = "";
$PWD = "";

if (!$link = @odbc_connect($SystemDSN, $UserName, $PWD)) {
   die("Odbc-yhteydessä ongelmia.");
}
// Taulu = taulunimi / sheetin nimi excelissä, muuta
// käyttäessäsi! Huomaa '$' on pakollinen excel-taulunimien
// perässä [MJ]
$sql = "SELECT * FROM [Taulu$]";
if (odbc_prepare($link,$sql)) { // Toimiiko sql-lause?
    // Suoritetaan sql-lause yhteyden $link kautta jos sql OK.
    $row=odbc_exec($link,$sql);
}

// Silmukassa sijoitetaan muuttujiin rivien arvo rivi
// kerrallaan. While lukee ylhäältä alas taulukkoa.
//
echo '<table>';
while (odbc_fetch_into($row,$Sarake)) {
     $EnsimmainenSarake = $Sarake[0];
     $ToinenSarake = $Sarake[1];
     echo'<tr><td>'.$EnsimmäinenSarake.'</td><td>'.$ToinenSarake.'</td></tr>';
    // jne. Joka kierroksella liikkuu rivin alaspäin taulukossa
}
echo '</table>';




// Kirjoitus excelissä; samaa tapaa käyttäen mutta kuten kommentissa nimim. henkka kirjoittaa. Eli select-lauseen tilalle insert lause, johon sijoitetaan arvot. Huomaa syntaksi insert lauseessa:

$kohdeTied = "tiedosto.xls"; // excel-tiedoston nimi, laita tähän myös polku jos tiedosto ei ole oletushakemistossa


// Erona edelliseen on "ReadOnly=0;" (eli voi myös kirjoittaa, arvolla ReadOnly=1; voi vain lukea, oletus ReadOnly=1;)

// PageTimeOut=kuinka usein tarkistaa onko tietoja päivitetty, tuhansina millisekunteina esim. 5 = 5000 ms

// Threads= montako säiettä

//MaxBufferSize= Bufferin koko, kuinka paljon "kasataan" tietoa muistiin ennen toimenpiteitä. Tätä ei saa asettaa pienemmäksi kuin 128 (Kt)
// DriverId ym. "itseselittyviä", ei tarvitse muutella.
$SystemDSN = "DRIVER={Microsoft Excel Driver (*.xls)};
              DBQ=".$kohdeTied.";
              UserCommitSync=Yes;
              Threads=3;
              ReadOnly=0;
              SafeTransactions=0;
              PageTimeout=5;
              MaxScanRows=8;
              MaxBufferSize=2048;
              DriverId=281;
              DefaultDir=C:\Program Files\Apache Group\Apache\htdocs";

$UserName = "";
$PWD = "";

if (!$link = @odbc_connect($SystemDSN, $UserName, $PWD)) {
   die("Odbc-yhteydessä ongelmia.");
}


$sqlINSERT= "INSERT (A,B,C) VALUES SET ('".$Arvo1."','".$Arvo2."','".$Arvo3."')";
if (odbc_exec($link,$sqlINSERT)) {
  echo 'Kirjoitus onnistui.';
} else {
 echo 'Kirjoitus ei onnistunut.';
}




?>

Kommentit

makeuu [09.08.2004 20:16:25]

#

Koodia voisi sisentää hieman.. myös muuttujanimet näyttivät turhan pitkiltä :P Muuten kelpo koodi ;)

edit: <?php tagit voisi olla ihan tarpeelliset ?

tsuriga [10.08.2004 01:24:17]

#

Tämä on ilmeisestikin tarkoitettu esimerkiksi ja siksi pitkät ja havainnollistavat muuttujanimet eivät haittaa. Eivätkä haittaisi muutenkaan? Hassua, sain äsken vielä värityksen, mutta nyt sitä ei näy. Sisennyksien ja php-tagien kanssa kelpo vinkki.

MtJ [10.08.2004 10:04:15]

#

Kyllä, esimerkinomainen koodi, joten tarkoituksella tein muuttujanimistä pitkiä että selventäisi koodin suoritusta. Jokainen voi tietenkin vapaasti muunnella ja käyttää tätä esimerkkiä. Itselläni meni "jonkin" aikaa kun sain koottua kyseisen scriptinpätkän.

Muokkasin jonkin verran tuota selkeämpään ulkoasuun.

ajv [10.08.2004 20:05:18]

#

Todella hyvä koodivinkki! En edes tiennyt että moinen on mahdollista. Vielä kun saisi lisättyä rivejä...

henkka [15.08.2004 21:51:20]

#

Onnistuu sekin.

odbc_exec($link,"INSERT INTO [Taulu$] A, B VALUES 'ekaan sarakkeeseen', 'toiseen sarakkeeseen'");

ajv [18.05.2005 13:57:23]

#

Täsä vielä linkki julkaisematta jääneeseen koodivinkkiin, jossa käsitellään datan lisäystä exceliin:
https://www.ohjelmointiputka.net/koodivinkit/24465-php-odb

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta