webForumDet fria alternativet

Paging mot Microsoft Access Db

9 svar · 459 visningar · startad av Fredde Mannen

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#1

Är det någon här ute som kan guida en stackare på vägen mot att skapa en paging mot en Microsoft Access Db, jag kunde ju inte använda mig av en MySQL-baserad paging, eftersom Microsoft Access db inte stödjer LIMIT!!!

Plz. Hjälp!! :q

SPiNMedlem sedan mars 20005 832 inlägg
#2

Jag skrev ihop följande, men har inte möjligheten att testa det... Säg gärna till om det fungerar, då lägger jag upp det under wF-Script. :)

<?php
define( "POSTS_PER_PAGE", 10 );

if( !isset( $_GET[ 'curPage' ] ) || $_GET[ 'curPage' ] == "" ) {
	$curPage = 1;
}
else {
	$curPage = ( int )$_GET[ 'curPage' ];
}

$adoConnection = new COM( "ADODB.Connection" );
$adoRecordset = new COM( "ADODB.Recordset" );

$adoConnection->open( "driver={Microsoft Access Driver (*.mdb); DBQ=C:\\Sökväg\\Till\\Databas.mdb" );

$adoRecordset->CursorLocation = 3;
$adoRecordset->CahcheSize = POSTS_PER_PAGE;
$adoRecordset->open( "SELECT name, email FROM tbl ORDER BY name ASC, email ASC", $adoConnection );
$adoRecordset->MoveFirst;
$adoRecordset->PageSize = POSTS_PER_PAGE;

$totalPages = $adoRecordset->PageCount;

$adoRecordset->AbsolutePage = $curPage;

echo "<html>\n<head>\n<title>Paging!</title>\n</head>\n<body>\n\n";

$counter = 0;

while( $adoRecordset->EOF != true AND counter < $adoRecordset->PageSize ) {
	echo $adoRecordset->Fields( "name" ) . " - " . $adoRecordset->Fields( "email" ) . "<br />\n";
	$counter++;
	
	$adoRecordset->MoveNext
}

echo "<br />\n";
echo "Current page: " . $curPage . "<br />\n";
echo "Of totally: " . $totalPages . "<br />\n";

if( $curPage > 1 )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage - 1 . "\">Föregående</a>";

echo "&nbsp; &nbsp; &nbsp; &nbsp;";

if( ( ( int ) $curPage ) != ( ( int ) $totalPages ) )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage + 1 . "\">Nästa</a>";

echo "\n<br />\n";
echo "</body>\n</html>";

?>

Du ser nog var du ska ändra i koden, så att det passar dig. ;)

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#3

Jepp det ska jag göra!!! :) tackar tackar!!!

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#4

Funkade inte, den gav felmeddelande:

Parse error: parse error, unexpected '}' in c:\inetpub\wwwroot\nya\default.php on line 38

SPiNMedlem sedan mars 20005 832 inlägg
#5

Update:

<?php
define( "POSTS_PER_PAGE", 10 );

if( !isset( $_GET[ 'curPage' ] ) || $_GET[ 'curPage' ] == "" ) {
	$curPage = 1;
}
else {
	$curPage = ( int )$_GET[ 'curPage' ];
}

$adoConnection = new COM( "ADODB.Connection" );
$adoRecordset = new COM( "ADODB.Recordset" );

$adoConnection->open( "driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\\Sökväg\\Till\\Databas.mdb" );

$adoRecordset->CursorLocation = 3;
$adoRecordset->CahcheSize = POSTS_PER_PAGE;
$adoRecordset->open( "SELECT name, email FROM tbl ORDER BY name ASC, email ASC", $adoConnection );
$adoRecordset->MoveFirst;
$adoRecordset->PageSize = POSTS_PER_PAGE;

$totalPages = $adoRecordset->PageCount;

$adoRecordset->AbsolutePage = $curPage;

echo "<html>\n<head>\n<title>Paging!</title>\n</head>\n<body>\n\n";

$counter = 0;

while( $adoRecordset->EOF != true && counter < $adoRecordset->PageSize ) {
	echo $adoRecordset->Fields( "name" ) . " - " . $adoRecordset->Fields( "email" ) . "<br />\n";
	$counter++;
	
	$adoRecordset->MoveNext;
}

echo "<br />\n";
echo "Current page: " . $curPage . "<br />\n";
echo "Of totally: " . $totalPages . "<br />\n";

if( $curPage > 1 )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage - 1 . "\">Föregående</a>";

echo "&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;";

if( ( ( int ) $curPage ) != ( ( int ) $totalPages ) )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage + 1 . "\">Nästa</a>";

echo "\n<br />\n";
echo "</body>\n</html>";

?>
Fredde MannenMedlem sedan nov. 20013 498 inlägg
#6

errors!!!

Warning: Invoke() failed: Undantag inträffade. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][Drivrutin för ODBC Microsoft Access]Allmänt fel Det går inte att öppna registernyckeln 'Temporary (volatile) Jet DSN for process 0x644 Thread 0x640 DBC 0xb6cb4c Jet'. in c:\inetpub\wwwroot\nya\default.php on line 16

Warning: Unable to lookup CahcheSize: Okänt namn. in c:\inetpub\wwwroot\nya\default.php on line 19

Warning: Invoke() failed: Undantag inträffade. Source: ADODB.Recordset Description: Åtgärden är inte tillåten på ett objekt som refererar till en stängd eller en ogiltig anslutning. in c:\inetpub\wwwroot\nya\default.php on line 20

Warning: PropGet() failed: Undantag inträffade. Source: ADODB.Recordset Description: Åtgärden är inte tillåten när objektet är stängt. in c:\inetpub\wwwroot\nya\default.php on line 24

Warning: PropPut() failed: Undantag inträffade. Source: ADODB.Recordset Description: Åtgärden är inte tillåten när objektet är stängt. in c:\inetpub\wwwroot\nya\default.php on line 26

Warning: PropGet() failed: Undantag inträffade. Source: ADODB.Recordset Description: Åtgärden är inte tillåten när objektet är stängt. in c:\inetpub\wwwroot\nya\default.php on line 32

Notice: Use of undefined constant counter - assumed 'counter' in c:\inetpub\wwwroot\nya\default.php on line 32

och så nåra hundara till... :stud

SPiNMedlem sedan mars 20005 832 inlägg
#7

Jeeez... :o
Då testar vi igen:

<?php
define( "POSTS_PER_PAGE", 10 );

if( !isset( $_GET[ 'curPage' ] ) || $_GET[ 'curPage' ] == "" ) {
	$curPage = 1;
}
else {
	$curPage = ( int )$_GET[ 'curPage' ];
}

$adoConnection = new COM( "ADODB.Connection" );
$adoRecordset = new COM( "ADODB.Recordset" );

$adoConnection->open( "DSN=dinDSN" );

$adoRecordset->CursorLocation = 3;
$adoRecordset->CacheSize = POSTS_PER_PAGE;
$adoRecordset->open( "SELECT name, email FROM tbl ORDER BY name ASC, email ASC", $adoConnection, 3, 3 );
$adoRecordset->MoveFirst;
$adoRecordset->PageSize = POSTS_PER_PAGE;

$totalPages = $adoRecordset->PageCount;

$adoRecordset->AbsolutePage = $curPage;

echo "<html>\n<head>\n<title>Paging!</title>\n</head>\n<body>\n\n";

$counter = 0;

while( $adoRecordset->EOF != true && counter < $adoRecordset->PageSize ) {
	echo $adoRecordset->Fields( "name" ) . " - " . $adoRecordset->Fields( "email" ) . "<br />\n";
	$counter++;
	
	$adoRecordset->MoveNext;
}

echo "<br />\n";
echo "Current page: " . $curPage . "<br />\n";
echo "Of totally: " . $totalPages . "<br />\n";

if( $curPage > 1 )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage - 1 . "\">Föregående</a>";

echo "&nbsp; &nbsp; &nbsp; &nbsp;";

if( ( ( int ) $curPage ) != ( ( int ) $totalPages ) )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage + 1 . "\">Nästa</a>";

echo "\n<br />\n";
echo "</body>\n</html>";

?>

Till det här exemplet måste du dock ha en DSN för din databas.

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#8

Funkade en anningen bättre!!! =) Inga fel meddelanden ialla fall!!! tackar och bockar!!! :e

fick dock ordna till en grejj som inte funkade... det var nästa och föregående sida!!!

SPiNMedlem sedan mars 20005 832 inlägg
#9

Vad var fel då? Fungerar det nu?

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#10

Felet och felet...

Felet, den skrev aldrig ut Nästa och föregående som länkar utan koden:

if( $curPage > 1 )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage - 1 . "\">Föregående</a>";

echo "       ";

if( ( ( int ) $curPage ) != ( ( int ) $totalPages ) )
	echo "<a href=\"" . $_SERVER[ 'PHP_SELF' ] . "?curPage=" . $curPage + 1 . "\">Nästa</a>";

resulterade bara i :

1">Nästa

Så jag ändrade det till:

if( $curPage > 1 ) {

$page=$curPage - 1;
	echo "<a href=\"default.php?curPage=" . $page . "\">Föregående</a>";

}

echo "       ";
 
if( ( ( int ) $curPage ) != ( ( int ) $totalPages ) ) {
$page=$curPage + 1;
echo "<a href=\"default.php?curPage=" . $page . "\">Nästa</a>";

}

och vips så skrev den ut Nästa och Föregående....

Tack för all hjälp!!! :birp *skål*

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb