Bagaimana memanggil fungsi ditetapkan pengguna dari SQL Pilih pernyataan di FoxPro

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 124402 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menunjukkan dengan contoh bagaimana untuk menambahkan fungsionalitas ke terstruktur Bahasa kueri SQL Pilih perintah dengan memanggil fungsi ditetapkan pengguna (UDF) dari SQL Pilih pernyataan.

INFORMASI LEBIH LANJUT

Asumsikan bahwa Anda ingin membuat permintaan yang akan menghasilkan tiga atau kurang Catatan untuk setiap negara di meja pelanggan.

Menggunakan tabel pelanggan di direktori tutorial kode dari "Kode contoh" bagian dari artikel ini, Anda dapat menentukan berapa banyak catatan dari setiap negara adalah untuk dimasukkan dalam hasil pencarian. Variabel max_match diatur ke 3, tapi tidak semua negara memiliki 3 atau lebih catatan, permintaan yang dihasilkan tidak akan memiliki 3 * 49 catatan. Contoh ini akan menghasilkan 116 Catatan.

Ketika max_match set ke 2, hasilnya berisi catatan 86. Apabila diatur ke 1, hasil berisi 49 catatan, yang merupakan jumlah yang sama catatan 'Kelompok oleh negara' klausul kembali.

Contoh langkah demi langkah

  1. Membuat file yang berisi kode yang tercantum dalam "FoxPro 2.x sampel Kode"atau Visual FoxPro sampel kode bagian dari artikel ini, dan menyimpannya sebagai utama.PRG.
  2. Dari FoxPro baris perintah, ketik "DO utama" tanpa kutipan menandai. Kemudian tekan ENTER untuk melihat hasil.

FoxPro 2.x contoh kode

CLEAR
CLEAR ALL
SET DEFAULT TO SYS(2004)+"tutorial"
match=0
max_match=3
prev_state="None"
first_call=.T.

SELECT state FROM customer ORDER BY state INTO CURSOR tmp1
SELECT state FROM tmp1 WHERE mycount()

FUNCTION mycount

DO CASE

CASE first_call                                   && Condition  1
  first_call = .F.
CASE (state = prev_state) AND (match < max_match) && Condition  2
  match = match + 1
CASE state != prev_state                          && Condition  3
  prev_state = state
  match = 1
CASE match >= max_match                           && Condition  4
  RETURN .F.
OTHERWISE
  WAIT WINDOW "Untested condition occurred, result may not be correct!"
ENDCASE
RETURN .T.
				

Visual Foxpro contoh kode

   CLEAR
   CLEAR ALL
   SET DEFAULT TO SYS(2004)+"Samples\Data"
   match=0
   max_match=3
   prev_to_country="None"
   first_call=.T.

   SELECT to_country FROM orders ORDER BY to_country INTO CURSOR tmp1
   SELECT to_country FROM tmp1 WHERE mycount()

   FUNCTION mycount

   DO CASE

   CASE first_call                                         && Condition  1
     first_call = .F.
   CASE (to_country=prev_to_country) AND (match<max_match) && Condition  2
     match = match + 1
   CASE to_country != prev_to_country                      && Condition  3
     prev_to_country = to_country
     match = 1
   CASE match >= max_match                                 && Condition  4
     RETURN .F.
   OTHERWISE
     WAIT WINDOW "Untested condition occurred, result may not be correct!"
   ENDCASE
   RETURN .T.
				

Apa kode

Beberapa baris pertama dalam program utama membersihkan lingkungan dan menginisialisasi beberapa variabel global untuk digunakan dalam mycount() UDF. The perintah SQL Pilih pertama menciptakan KURSOR diurutkan (tmp1) untuk kedua pilih-SQL perintah untuk menggunakan. Mycount() UDF disebut sekali untuk masing-masing catatan di tmp1 KURSOR. Setiap kali UDF kembali benar, rekor saat ini di tmp1 disertakan dalam hasil pencarian.

Ada empat kondisi dalam UDF:
  1. Kondisi pertama hanya digunakan sekali. Hal ini memungkinkan catatan pertama di tmp1 KURSOR untuk diuji. Tanpa kondisi ini, catatan pertama dalam tmp1 akan diabaikan.
  2. Kondisi kedua memungkinkan kedua catatan dan catatan ketiga untuk setiap negara atau To_country untuk dimasukkan.
  3. Ketiga kondisi memungkinkan catatan pertama untuk setiap negara baru atau To_country untuk menjadi termasuk.

    Catatan Untuk kondisi ini untuk bekerja dengan benar, tabel harus diurutkan.
  4. Kondisi keempat menyebabkan rekor saat ini di tmp1 akan dilewati. Harap dicatat bahwa kondisi ini hanya diperiksa ketika semua sebelumnya kondisi mengevaluasi ke false. Else ditambahkan untuk pengecekan error.

Properti

ID Artikel: 124402 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual FoxPro 9.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft FoxPro 2.5a
  • Microsoft FoxPro 2.6 Standard Edition
Kata kunci: 
kbcode kbmt KB124402 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:124402

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com