กระทู้เก่าบอร์ด อ.Yeadram
        
           2,387   5		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ***กระชับข้อมูล บันทึกเป็นชื่อใหม่***      
    
      access 2003 สังให้กระชับข้อมูลเมื่อปิด
แต่ไม่อยากให้บันทึกเป็นชื่อไฟล์ใหม่ เช่น ฐานข้อมูล
อยากให้บันทึกซ้ำในชื่อไฟล์เดิม
ต้องแก้ตรงไหนครับ
ขอบคุณมาก
    
  แต่ไม่อยากให้บันทึกเป็นชื่อไฟล์ใหม่ เช่น ฐานข้อมูล
อยากให้บันทึกซ้ำในชื่อไฟล์เดิม
ต้องแก้ตรงไหนครับ
ขอบคุณมาก
				5 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R20223    
        
  
      ขอบคุณมากครับ
เข้าใจว่า ฐานข้อมูล ถูกนำไปใช้กับโปรแกรมสต็อค ทำให้ไม่สามารถบันทึกชื่อเดิมได้ ทั้งที่ปิดโปรแกรมหมดแล้ว
ช่วยไม่ได้แล้ว ทุกครั้งที่ต้องการกระชับข้อมูล ต้องคอยเปลี่ยนชื่อไฟล์เอง
    
    
  เข้าใจว่า ฐานข้อมูล ถูกนำไปใช้กับโปรแกรมสต็อค ทำให้ไม่สามารถบันทึกชื่อเดิมได้ ทั้งที่ปิดโปรแกรมหมดแล้ว
ช่วยไม่ได้แล้ว ทุกครั้งที่ต้องการกระชับข้อมูล ต้องคอยเปลี่ยนชื่อไฟล์เอง
        
    3 @R20226    
        
  
      ผมใช้ Access2003 อยู่ครับ ทำเป็น Front Program และ Back DataBase 
และกำหนด Compact on close ใน Tools / Options ... / General เพื่อสั่งให้ทำงานเมื่อปิดไฟล์ทั้งสองไฟล์
ถ้าไฟล์ Database ถูกใช้งานอยู่โดยมีการเปิดโปรแกรมที่เครื่องอื่น เมื่่อ Compact จะให้บันทึกเป็นชื่อใหม่ครับ
ต้องปิด Front Program ทุกตัวครับ แล้วเมื่อเปิดปิด Back Database จะบันทึกในชื่อเดิมครับ
    
    
  และกำหนด Compact on close ใน Tools / Options ... / General เพื่อสั่งให้ทำงานเมื่อปิดไฟล์ทั้งสองไฟล์
ถ้าไฟล์ Database ถูกใช้งานอยู่โดยมีการเปิดโปรแกรมที่เครื่องอื่น เมื่่อ Compact จะให้บันทึกเป็นชื่อใหม่ครับ
ต้องปิด Front Program ทุกตัวครับ แล้วเมื่อเปิดปิด Back Database จะบันทึกในชื่อเดิมครับ
        
    4 @R20230    
        
  
      อื่ม คือถ้าอยากจะ Compact แล้ว Backup เป็นไฟล์ใหม่สำรองผมเคยโพสไว้ที่นี่ครับ กดเบาๆ
แต่ถ้าต้องการตรวจสอบว่ามีเครื่องไหนที่ใช้ฐานข้อมูลเดียวกับเราบ้าง จะได้รู้ว่าเครื่องไหนใช้งานไฟล์อยู่ทำให้ไม่สามารถ Compact ได้
- ให้เปิดไฟล์ฐานข้อมูลนั้นขึ้นมา เข้าไปที่หน้าต่างของ Micorosoft Visual Basic for Applications เมนู Tools > References ทำเครื่องหมายถูกที่หัวข้อ Microsoft ActiveX Data Objects x.x Library (หากไม่ได้กำหนด)
- ใส่โค๊ดลงใน Module ดังนี้:
'----------------Code Start----------------
Sub ShowUserRosterMultipleUsers()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i, j As Long
 
Set cn = CurrentProject.Connection
 
Set rs = cn.OpenSchema(adSchemaProviderSpecific, _
, "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
 
Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _
"", rs.Fields(2).Name, rs.Fields(3).Name
 
While Not rs.EOF
Debug.Print rs.Fields(0), rs.Fields(1), _
rs.Fields(2), rs.Fields(3)
rs.MoveNext
Wend
End Sub
'-----------------Code End-----------------
- กด CTRL + G เพื่อเปิดหน้าต่าง Immediate
 
- พิมพ์บรรทัดต่อไปนี้ในหน้าต่าง Immediate คำว่า ShowUserRosterMultipleUsers และกด ENTER:
 
ที่หน้าต่าง Immediate คือ หากมีการเข้าถึงฐานข้อมูลทั้งเครื่องที่ชื่อ Computer1 และ เครื่อง Computer2 ก็จะแสดงดังนี้:
 
COMPUTER_NAME LOGIN_NAME CONNECTED SUSPECT_STATE
Computer1 Admin True Null
Computer2 Admin True Null
...
ก็ให้เราไล่ดูว่าชื่อเครื่องไหนที่ยังใช้งานอยู่โดยที่เราไม่รู้ครับ
    
  แต่ถ้าต้องการตรวจสอบว่ามีเครื่องไหนที่ใช้ฐานข้อมูลเดียวกับเราบ้าง จะได้รู้ว่าเครื่องไหนใช้งานไฟล์อยู่ทำให้ไม่สามารถ Compact ได้
- ให้เปิดไฟล์ฐานข้อมูลนั้นขึ้นมา เข้าไปที่หน้าต่างของ Micorosoft Visual Basic for Applications เมนู Tools > References ทำเครื่องหมายถูกที่หัวข้อ Microsoft ActiveX Data Objects x.x Library (หากไม่ได้กำหนด)
- ใส่โค๊ดลงใน Module ดังนี้:
'----------------Code Start----------------
Sub ShowUserRosterMultipleUsers()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i, j As Long
Set cn = CurrentProject.Connection
Set rs = cn.OpenSchema(adSchemaProviderSpecific, _
, "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _
"", rs.Fields(2).Name, rs.Fields(3).Name
While Not rs.EOF
Debug.Print rs.Fields(0), rs.Fields(1), _
rs.Fields(2), rs.Fields(3)
rs.MoveNext
Wend
End Sub
'-----------------Code End-----------------
- กด CTRL + G เพื่อเปิดหน้าต่าง Immediate
- พิมพ์บรรทัดต่อไปนี้ในหน้าต่าง Immediate คำว่า ShowUserRosterMultipleUsers และกด ENTER:
ที่หน้าต่าง Immediate คือ หากมีการเข้าถึงฐานข้อมูลทั้งเครื่องที่ชื่อ Computer1 และ เครื่อง Computer2 ก็จะแสดงดังนี้:
COMPUTER_NAME LOGIN_NAME CONNECTED SUSPECT_STATE
Computer1 Admin True Null
Computer2 Admin True Null
...
ก็ให้เราไล่ดูว่าชื่อเครื่องไหนที่ยังใช้งานอยู่โดยที่เราไม่รู้ครับ
        
    5 @R20231    
        
    
      แต่หากเป็นกรณี ไฟล์ฐานข้อมูลเป็น Back End ให้ใช้การเปิดไฟล์ MS Access ไฟล์ใหม่ขึ้นมาก็ได้ แล้วเปลี่ยนบรรทัด
Set cn = CurrentProject.Connection
เป็น
Set cn = New ADODB.Connection
cn.Open "Provider = Microsoft.ACE.OLEDB.12.0; " & "Data Source = ชื่อพาธ\ชื่อไฟล์; " & "Persist Security Info=false;"
กรณีไฟล์มี Password
cn.Open "Provider = Microsoft.ACE.OLEDB.12.0; " & "Data Source = ชื่อพาธ\ชื่อไฟล์; Jet OLEDB:Database Password=รหัส; " & "Persist Security Info=false;"
    
  Set cn = CurrentProject.Connection
เป็น
Set cn = New ADODB.Connection
cn.Open "Provider = Microsoft.ACE.OLEDB.12.0; " & "Data Source = ชื่อพาธ\ชื่อไฟล์; " & "Persist Security Info=false;"
กรณีไฟล์มี Password
cn.Open "Provider = Microsoft.ACE.OLEDB.12.0; " & "Data Source = ชื่อพาธ\ชื่อไฟล์; Jet OLEDB:Database Password=รหัส; " & "Persist Security Info=false;"
      Time: 0.0621s
    
      
		
หรือไม่ก็ ถ้ายังไม่ได้เป็นฐานข้อมูลอะไร แล้วเลือก Tools / Database Utilities / Compcat and Repair Database ... มันถึงจะถามว่าจะทำกับไฟล์อะไร แล้วเก็บเป็นชื่ออะไร