 |
Fatal error: Uncaught exception com_exception with message <b>Source:</b> Microsoft OLE DB Provider for ODBC Drivers<br/><b>Description:</b> [Microsoft][ODBC Microsoft Access Driver] Could not delete from specified tables. |
|
 |
|
|
 |
 |
|
ซ่อยข่อยแหน่ (ภาษาอีสานแปลว่าช่วยด้วย อิอิ)
|
 |
 |
 |
 |
Date :
2018-03-14 12:41:09 |
By :
yag00za |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
รึเป็นเพราะ ฟิล code ในฐานข้อมูล เป็น ตัวอักษรผสมเลข
เวลาใช้
$strSQL .="DELETE FROM School ";
$strSQL .="WHERE Code = '".$_GET["CusID"]."' ";
เลยผิดพลาด *อันนี้ผมเดานะคับ รบกวนผู้รู้ชี้แนะทีคับ
|
 |
 |
 |
 |
Date :
2018-03-14 12:50:28 |
By :
yag00za |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
<a href="delete.php?CusID=<?php echo $objRec->Fields["Code"]->Value;?>">Delete</a></td>
ที่ browser ลองใช้ inspect ดูว่าตำแหน่งนี้ได้ค่ามาถูกต้องไหม
|
 |
 |
 |
 |
Date :
2018-03-14 13:08:05 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
กะเขียน ธรรมดา
Code (PHP)
<?php
$strConn = new COM("ADODB.Connection") or die("Cannot start ADO");
$strConn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("shop/scon.mdb"));
$strSQL =" DELETE FROM School WHERE Code = '".$_GET["CusID"]."' ";
$flgDelete = $strConn->Execute($strSQL);
If($flgDelete)
{
echo("Record Deleted.");
}
else
{
echo("Error Delete [".$strSQL."]");
}
$strConn->Close();
$strConn = null;
?>
ถ้าไม่ได้ Check Connect to DB และ $_GET["CusID"]
|
 |
 |
 |
 |
Date :
2018-03-14 13:08:47 |
By :
Hararock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเอามาจากบทความนี้อ่ะครับ
https://www.thaicreate.com/php/php-com-ado-delete-record.html
ลองโหลดมาเทส เป็นเหมือนกันเลย
ลองโหลดไปลองดูครับ
|
 |
 |
 |
 |
Date :
2018-03-14 13:59:15 |
By :
yag00za |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
realpath("shop/scon.mdb"));
realpath("mydatabase.mdb"));
Code (PHP)
realpath("shop/scon.mdb"));
ต่างกัน
realpath("mydatabase.mdb"));
Databases คุณคือ scon
|
 |
 |
 |
 |
Date :
2018-03-14 14:18:25 |
By :
Hararock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองเช็ค property ไฟล์ เป็น readonly หรือเปล่า
|
 |
 |
 |
 |
Date :
2018-03-14 14:41:49 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เป็นไปได้ว่าข้อมูลสำหรับ read-only อย่างเดียวครับ
|
 |
 |
 |
 |
Date :
2018-03-14 15:55:09 |
By :
dudesaranyu |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ท่านใดสามารถตอบได้ว่า บทเรียนลิ้งด้านล่าง ใช้ได้ ชี้แนะทีครับ
ผมลองทำแล้วไม่ได้จิงๆ ถ้าตรงนี้ผ่าน ผมก็ไปต่อได้ครับ
*แต่บทเรียน add/update ก็ยังเป็นเหมือนกัน
อยากให้ลองเอาไปรัน ดู ถ้าได้แล้วมาแชร์ เพื่อเป็นวิทยาทานนะครับ
เผื่อมีคนที่อยากศึกษาการเชื่อมต่อแบบนี้ ได้เข้ามาดู
https://www.thaicreate.com/php/php-com-ado-delete-record.html

|
 |
 |
 |
 |
Date :
2018-03-14 15:59:25 |
By :
yag00za |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คุณ search error ใน microsoft เค้าก็บอกอยู่ครับว่า read-only
|
 |
 |
 |
 |
Date :
2018-03-14 16:01:37 |
By :
dudesaranyu |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถามนิด ขณะทำงาน web browser เปิด MS access อยู่หรือเปล่าครับ
คือ บางทีมันไป block file ไว้ไม่ให้เขียนได้ (เปิดได้ อ่านได้ แต่ไม่ให้เขียน ไม่ให้ลบ) ถ้ายังเปิด MS Access อยู่
คือ MS Access เป็น database ในระดับ file เหมือน excel msword เท่านั้นครับ ยังไม่ใช่ในระดับ server แค่ standalone
ถ้าอยากให้แชร์ ในระดับ server สามารถใช้งานพร้อมกันได้ ต้องใช้ share point มาช่วย
ทำไมผู้ใช้ส่วนใหญ่ถีงไม่ใช้ MS Access มาทำ Server เพราะมัน บล๊อค ไฟล์ไม่ให้เขียน ไงครับ
ทดลองทำได้ ทำ server เล็กๆ ได้ ที่ตะโกนบอกกันว่าปิดโปรแกรมก่อนฉันจะทำ 5555
ถ้าอยากใช้จริงๆ ก็ต้องเขียนโค๊ดเพิ่ม ให้ตรวจสอบว่าเขียนได้ไหม ถ้าไม่ได้ ก็ reconnect ใหม่จนกว่าจะเขียนได้
แต่ถ้าเปิดไฟล์ด้วย MS Access โปรแกรมอื่นก็หมดสิทธิ์เขียน ต้องปิด MS Access ก่อน
|
 |
 |
 |
 |
Date :
2018-03-14 17:37:04 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ได้ลองทดสอบโปรแกรม แล้วใช้งานได้
mydb.mdb/test

Code (PHP)
<?php
//index.php
include ('mdb.php');
$mdb = new mdb('mydb.mdb'); // your own mdb filename required
$ac=filter_input(INPUT_GET, 'action');
switch($ac){
case 'delete':
$sql='delete from test where id='.filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$mdb->execute($sql);
header('location: index.php'); break;
case 'insert':
$un=filter_input(INPUT_POST, 'user');
$pw=filter_input(INPUT_POST, 'pswd');
$cr=filter_input(INPUT_POST, 'credit');
$sql = "insert into test ".
"select top 1 (id + 1) as x, '$un' as un, '$pw' as pw, '$cr' as cr , '0' as bl from test order by id desc ";
$mdb->execute($sql); // your own table in the mdb file
header('location: index.php'); break;
default:
//
}
$mdb->execute('select * from test'); // your own table in the mdb file
while(!$mdb->eof()) {
echo ($id=$mdb->fieldvalue('id')) . ' = ' . $mdb->fieldvalue('username');
echo ' <a href="?action=delete&id='.$id.'">x</a><br>';
$mdb->movenext();
}
echo '<br><hr><br>';
$mdb->movefirst();
$id = $mdb->RS->Fields(0);
$un = $mdb->RS->Fields(1);
$pw = $mdb->RS->Fields(2);
while(!$mdb->eof()){
echo $id->value . ' = ' . $un->value . ' : ' . $pw->value;
echo ' <a href="?action=delete&id='.$id->value.'">x</a><br>';
$mdb->movenext();
}
$mdb->close();
?>
<form method="post" action="?action=insert">
<label>username</label><input type="text" name="user"><br>
<label>password</label><input type="password" name="pswd"><br>
<label>credit</label><input type="text" name="credit"><br>
<button>save</button>
</form>
Code (PHP)
<?php
//mdb.php
class mdb
{
var $RS = 0;
var $con= 0;
var $RecordsAffected;
var $strProvider = 'DRIVER={Microsoft Access Driver (*.mdb)}';
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 = 'DBQ='.$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->con= new COM( 'ADODB.Connection' );
if( $this->con){
$this->con->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()
function execute( $strSQL, $getrecordcount = false ){
$this->RS = $this->con->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();
$this->RS=null;
$this->con->Close();
$this->con=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
credit stackoverflow // copy มาแก้ไขแล้วลืม link
|
ประวัติการแก้ไข 2018-03-15 13:56:47 2018-03-15 14:24:24
 |
 |
 |
 |
Date :
2018-03-15 13:53:37 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้ามันแสดงผลได้มันต้องมีครับ
แต่ต้องเป็น host บน window เท่านั้น linux ไม่มี service msoffice
|
 |
 |
 |
 |
Date :
2018-03-15 15:50:27 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
$con = new com('ADODB.connection');
ใช้ extension -> php_com_dotnet.dll
|
 |
 |
 |
 |
Date :
2018-03-15 18:22:20 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|