1. Operasikan akses database di Delphi (buat file .mdb, kompres database)
Kode berikut telah diuji pada win2k, d6, dan mdac2.6.
Program yang dikompilasi berjalan dengan sukses di versi kedua win98 tanpa lingkungan akses.
//sebelum menggunakan comobj,activex
//Deklarasikan string koneksi
konstanta
connectionstring = 'penyedia=microsoft.jet.oledb.4.0;sumber data=%s;'
+'jet oledb:kata sandi basis data=%s;';
//------------------------------------------------ ==============
// prosedur: gettemppathfilename
// penulis: ysai
// tanggal : 27-01-2003
// argumen: (tidak ada)
// hasil: rangkaian
//------------------------------------------------ ==============
fungsi gettemppathfilename():string;
//Dapatkan nama file sementara
var
spath,sfile&:array [0..254] dari char;
mulai
gettemppath(254,spath);
gettempfilename(spath,'~sm',0,sfile);
hasil:=sfile;
deletefile(pchar(hasil));
akhir;
//------------------------------------------------ ==============
// prosedur: buatfile akses
// penulis: ysai
// tanggal : 27-01-2003
// argumen: nama file:string;kata sandi:string=''
// hasil: boolean
//------------------------------------------------ ==============
fungsi createaccessfile(nama file:string;kata sandi:string=''):boolean;
//Buat file akses, gagal jika file ada
var
stempelnamafile:string;
vkatalog:olevarian;
mulai
stempfilename:=gettemppathnamafile;
mencoba
vcatalog:=createoleobject('adox.catalog');
vcatalog.create(format(connectionstring,[stempfilename,password]));
hasil:=copyfile(pchar(stempfilename),pchar(filename),true);
deletefile(namafilestemp);
kecuali
hasil:=salah;
akhir;
akhir;
//------------------------------------------------ ==============
// prosedur: database kompak
// penulis: ysai
// tanggal : 27-01-2003
// argumen: nama file, kata sandi: string
// hasil: boolean
//------------------------------------------------ ==============
function compactdatabase(nama file,kata sandi:string):boolean;
//Kompres dan perbaiki database, timpa file sumber
var
stempelnamafile:string;
vje:olevarian;
mulai
stempfilename:=gettemppathnamafile;
mencoba
vje:=createoleobject('jro.jetengine');
vje.compactdatabase(format(string koneksi,[namafile,kata sandi]),
format(sconnectionstring,[stempfilename,apassword]));
hasil:=copyfile(pchar(stempfilename),pchar(afilename),false);
deletefile(namafilestemp);
kecuali
hasil:=salah;
akhir;
akhir;
//------------------------------------------------ ==============
// prosedur: ubah kata sandi database
// penulis: ysai
// tanggal : 27-01-2003
// argumen: nama file, kata sandi lama, kata sandi baru: string
// hasil: boolean
//------------------------------------------------ ==============
fungsi perubahan kata sandi basis data (nama file, kata sandi lama, kata sandi baru: string): boolean;
//Ubah kata sandi basis data akses
var
stempelnamafile:string;
vje:olevarian;
mulai
stempfilename:=gettemppathnamafile;
mencoba
vje:=createoleobject('jro.jetengine');
vje.compactdatabase(format(string koneksi,[namafile,kata sandi lama]),
format(sconnectionstring,[stempfilename,anewpassword]));
hasil:=copyfile(pchar(stempfilename),pchar(afilename),false);
deletefile(namafilestemp);
kecuali
hasil:=salah;
akhir;
akhir;
2. Hal-hal yang harus diperhatikan dan beberapa tips saat menggunakan pernyataan sql dalam akses
Pernyataan sql berikut lulus tes dalam permintaan akses 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 tanggal indeks pada tab1 ([tanggal]);
Setelah selesai, atribut indeks tanggal dari bidang yang diakses ditampilkan sebagai - Ya (ada duplikat).
Pernyataan berikut membuat indeks yang tidak dapat diulang pada kolom nama tab1
buat indeks inname unik pada tab1 (nama);
Setelah selesai, atribut indeks dari nama bidang yang diakses ditampilkan sebagai - Ya (tidak ada duplikasi).
Pernyataan berikut menghapus dua indeks yang baru saja dibuat
jatuhkan tanggal indeks pada tab1;
jatuhkan nama indeks pada tab1;
Perbandingan pernyataan pembaruan di access dan sqlserver:
Perbarui pernyataan untuk memperbarui beberapa tabel di sqlserver:
perbarui tab1
atur a.nama = b.nama
dari tab1 a,tab2 b
dimana a.id = b.id;
Pernyataan sql dengan fungsi yang sama di akses seharusnya
perbarui tab1 a,tab2 b
atur 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:
perbarui tab1 a,(pilih id,nama dari tab2) b
atur a.nama = b.nama
dimana a.id = b.id;
Akses beberapa database akses yang berbeda - gunakan klausa in di sql:
pilih a.*,b.* dari tab1 a,tab2 b di 'db2.mdb' di mana 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 akses xp lulus
Akses sumber data odbc lain yang ada di akses
Contoh berikut menanyakan data di sqlserver yang sedang diakses
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/software/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
akses mendukung subkueri
access mendukung gabungan luar, namun tidak menyertakan gabungan luar lengkap, jika didukung
gabung kiri atau gabung kanan
tetapi tidak didukung
gabung luar penuh atau gabung penuh
Kueri tanggal dalam akses
Catatan: Pemisah tanggal dan waktu dalam akses adalah #, bukan tanda kutip
pilih * dari tab1 di mana [tanggal]>#2002-1-1#;
Di delphi saya menggunakan ini
sql.tambahkan(format(
'pilih * dari tab1 di mana [tanggal]>#%s#;',
[tanggaltostr(tanggal)]));
String yang diakses 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.