1. Operasikan akses database di DELPHI (buat file .mdb, kompres database)
Kode berikut lulus tes di bawah WIN2K, D6, MDAC2.6,
Program yang dikompilasi berjalan dengan sukses di versi kedua WIN98 tanpa lingkungan ACCESS.
//Sebelum menggunakan ComObj,ActiveX
//Deklarasikan string koneksi
Konstan
SConnectionString = 'PRovider=Microsoft.Jet.OLEDB.4.0;Sumber Data=%s;'
+'Jet OLEDB:Kata Sandi Basis Data=%s;';
//------------------------------------------------ ==============
// Prosedur: DapatkanTempPathFileName
// Penulis: ysai
// Tanggal: 27-01-2003
// Argumen: (Tidak ada)
// Hasil: string
//------------------------------------------------ ==============
fungsi GetTempPathFileName():string;
//Dapatkan nama file sementara
var
SPath,SFile: array [0..254] dari char;
mulai
DapatkanTempPath(254,SPath);
DapatkanTempFileName(SPath,'~SM',0,SFile);
hasil:=SFile;
DeleteFile(PChar(hasil));
akhir;
//------------------------------------------------ ==============
// Prosedur: CreateAccessFile
// Penulis: ysai
// Tanggal: 27-01-2003
// Argumen: Nama File:String;Kata Sandi:string=''
// Hasil: boolean
//------------------------------------------------ ==============
fungsi CreateAccessFile(NamaFile:String;Kata Sandi:string=''):boolean;
//Buat file Akses, gagal jika file ada
var
STempFileName: string;
vKatalog:OleVariant;
mulai
STempFileName:=DapatkanTempPathFileName;
mencoba
vCatalog:=CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
hasil:=CopyFile(PChar(STempFileName),PChar(FileName),True);
HapusFile(STempFileName);
kecuali
hasil:=salah;
akhir;
akhir;
//------------------------------------------------ ==============
// Prosedur: CompactDatabase
// Penulis: ysai
// Tanggal: 27-01-2003
// Argumen: AFileName,APassWord:string
// Hasil: boolean
//------------------------------------------------ ==============
fungsi CompactDatabase(AFileName,APassWord:string):boolean;
//Kompres dan perbaiki database, timpa file sumber
var
STempFileName: string;
vJE:OleVariant;
mulai
STempFileName:=DapatkanTempPathFileName;
mencoba
vJE:=BuatOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
hasil:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
HapusFile(STempFileName);
kecuali
hasil:=salah;
akhir;
akhir;
//------------------------------------------------ ==============
// Prosedur: UbahDatabasePassword
// Penulis: ysai
// Tanggal: 27-01-2003
// Argumen: AFileName,AOldPassWord,ANewPassWord:string
// Hasil: boolean
//------------------------------------------------ ==============
fungsi ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;
//Ubah kata sandi basis data ACCESS
var
STempFileName: string;
vJE:OleVariant;
mulai
STempFileName:=DapatkanTempPathFileName;
mencoba
vJE:=BuatOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]),
format(SConnectionString,[STempFileName,ANewPassWord]));
hasil:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
HapusFile(STempFileName);
kecuali
hasil:=salah;
akhir;
akhir;
2. Hal-hal yang harus diperhatikan dan beberapa tips saat menggunakan pernyataan SQL di ACCESS
Pernyataan SQL berikut meneruskan kueri di ACCESS XP
Buat tabel:
Buat Tabel Tab1 (
Penghitung ID,
Rangkaian nama,
bilangan bulat umur,
[Tanggal] TanggalWaktu);
Keahlian:
Bidang kenaikan otomatis dideklarasikan dengan Penghitung.
Bidang yang nama bidangnya merupakan kata kunci diapit tanda kurung siku [], dan angka juga dapat diterima sebagai nama bidang.
Buat indeks:
Pernyataan berikut membuat indeks berulang pada kolom Tanggal Tab1
Buat Indeks iDate PADA Tab1 ([Tanggal]);
Setelah selesai, atribut indeks Tanggal pada bidang di ACCESS ditampilkan sebagai - Ya (duplikat).
Pernyataan berikut membuat indeks yang tidak dapat diulang pada kolom Nama di Tab1
Buat Indeks Unik iName PADA Tab1 (Nama);
Setelah selesai, atribut indeks bidang Nama di ACCESS ditampilkan sebagai - Ya (tidak ada duplikasi).
Pernyataan berikut menghapus dua indeks yang baru saja dibuat
Jatuhkan Indeks iDate PADA Tab1;
Jatuhkan Indeks iName PADA Tab1;
Perbandingan pernyataan ACCESS dan UPDATE di SQLSERVER:
Pernyataan UPDATE untuk memperbarui beberapa tabel di SQLSERVER:
PERBARUI Tab1
SET a.Nama = b.Nama
DARI Tab1 a,Tab2 b
DIMANA a.ID = b.ID;
Pernyataan SQL dengan fungsi yang sama di ACCESS seharusnya
PERBARUI Tab1 a,Tab2 b
SET a.Nama = b.Nama
DIMANA a.ID = b.ID;
Artinya: pernyataan UPDATE di ACCESS tidak memiliki klausa FROM, dan semua tabel yang direferensikan dicantumkan setelah kata kunci UPDATE.
Pada contoh di atas, jika Tab2 bukan tabel, melainkan query, misalnya:
UPDATE Tab1 a,(Pilih ID,Nama Dari Tab2) b
SET a.Nama = b.Nama
DIMANA a.ID = b.ID;
Akses beberapa database ACCESS yang berbeda - gunakan klausa In di SQL:
Pilih a.*,b.* Dari Tab1 a,Tab2 b Di 'db2.mdb' Dimana a.ID=b.ID;
Pernyataan SQL di atas menanyakan semua catatan yang terkait dengan Tab2 di Tab1 dan db2.mdb (di folder saat ini) di database saat ini.
Kekurangan - Basis data eksternal tidak dapat memiliki kata sandi.
Tambahan: Saya melihat balasan ugvanxk di sebuah postingan dan dapat menggunakannya
Pilih * dari [c:/aa/a.mdb;pwd=1111].table1;
Tes ACCESS XP lulus
Akses sumber data ODBC lainnya di ACCESS
Contoh berikut menanyakan data di SQLSERVER di ACCESS
PILIH * DARI Tab1 DI [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
Parameter lengkap properti koneksi sumber data eksternal adalah:
[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=pengguna;PWD=kata sandi;]
DRIVER=driver dapat ditemukan di registri
HKEY_LOCAL_MACHINE/PERANGKAT LUNAK/ODBC/ODBCINST.INI/
ditemukan di
Untuk impor data antar database heterogen, silakan merujuk ke Blue Blood Sword
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
ACCESS mendukung subkueri
ACCESS mendukung gabungan luar, namun tidak mencakup gabungan luar lengkap.
GABUNG KIRI atau GABUNG KANAN
tetapi tidak didukung
GABUNG LUAR LENGKAP atau GABUNG LENGKAP
Permintaan tanggal di ACCESS
Catatan: Pemisah tanggal dan waktu di ACCESS adalah #, bukan tanda kutip
Pilih * Dari Tab1 Dimana [Tanggal]>#2002-1-1#;
Di DELPHI saya menggunakan ini
SQL.Tambahkan(Format(
'Pilih * Dari Tab1 Dimana [Tanggal]>#%s#;',
[DateToStr(Tanggal)]));
String di ACCESS dapat dipisahkan dengan tanda kutip ganda, tetapi SQLSERVER tidak mengenalinya, jadi demi kenyamanan migrasi dan kompatibilitas,
Disarankan untuk menggunakan tanda kutip tunggal sebagai pembatas string.