PHP ve MS Access: SELECT sorgusu tarafından döndürülen Kayıt Sayısı

5 Cevap php

Ben bir MS Access veritabanı ile etkileşim için aşağıdaki PHP kodu çalıştırıyorum.

$odbc_con = new COM("ADODB.Connection");
$constr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . $db_path . ";";
$odbc_con -> open($constr);

$rs_select = $odbc_con -> execute ("SELECT * FROM Main");

($ Rs_select -> RecordCount) kullanarak verir -1 sorgu sıfır olmayan kayıtları döndürme olsa.

(a) What can be the reason? (b) Is there any way out?

Ben de count($rs_select -> GetRows()) kullanarak denedim. Bu ihtiyacını karşılayan ancak ilk bir diziye tüm kayıtların kopyalanmasını içerecektir gibi verimsiz görünüyor.

5 Cevap

ADODB tanımladığınız kayıt türüne bağlı olarak döndürülen ne recordcount için kendi kuralları vardır. Bkz:

MS Knowledge Base article 194973

W3C Schools article

Yukarıdaki örnekte, PHP, COM () nesnesi ADODB, genel veritabanı erişimi için bir COM arabirimi oluşturmak için kullanılır. PHP documentation göre, üretilen nesne başvurusu aşırı, bu yüzden sadece yerli ADODB nesne olurdu aynı özellikleri / yöntemleri kullanabilirsiniz. Bu, (eğer olması gerekiyorsa) doğru recordcount verecek birine kayıt türünü ayarlamak için ADODB yöntemleri kullanmak gerekiyor demektir. Alternatif, diğerleri de söylediğim gibi, SELECT ifadesinin döndürdüğü kayıtların COUNT () almak için ikinci bir sorgu kullanmaktır. Bu kolay, ama belirli bir ortamda uygun olmayabilir.

Ben bir ADO gurusu değilim, bu yüzden kayıt türünü ayarlamak için kesin komutları ile size sağlayamaz, ancak yukarıda anılan makalelerden, bu bir statik veya anahtar kümesi imleç ihtiyaç olduğu açıktır. Bu CursorType ayarı uygun bir yöntem recordset açar komutunda bir parametre kullanmak olduğunu bana görünüyor. This W3C Schools article on the CursorType property bu komut için uygun argümanlar verir.

Umarım, bu bilgiler orijinal afiş görevini, bir yol veya diğer gerçekleştirmek yardımcı olacaktır.

Bu ODBC henüz recordcount bilmiyor mümkündür. Bu durumda son kayda gitmek için ve ancak o kayıtların gerçek sayısını yansıtır recordcount olacaktır mümkündür. Bu sorgudan tüm kayıtları yük olacaktır çünkü bu muhtemelen de çok verimli olmayacaktır.

Oli dediği gibi, kullanarak SELECT COUNT(*) size sonucu verecektir. Ben 2 sorguları kullanarak hala benim ilk yöntemi kullanılarak daha verimli olacağını düşünüyorum.

Kendi COUNT operatör var Erişim değil mi? örneğin:

$rs_select = $odbc_con -> execute ("SELECT COUNT(*) FROM Main");

Temelde, Access ihtiyacı kadar (yine de kullanıcı deneyimi çok daha hızlı bu şekilde bulunuyor) size tüm kayıt kümesi göstermek için gitmiyor - Özellikle büyük bir kayıt kümesi ile.

Doğru bir sayım almak için tüm kayıt kümesi geçmelidir. Ben php karşılığının ne olduğunu bilmiyorum - VBA Ben normalde foo.MoveLast ve foo.MoveFirst bir ikilisi ile bunu. Pahalı, ama sen yine de belirlenen tüm kayıt işleme olacak gibi geliyor çünkü, ben Tamam sanırım.

(VBA imleri manipüle eğer bir yan not, bu aynı kastetmek, bir kayıt klonlamak ve formun kayıt geri imini kopyalamak önce hareket yok eğer bazı yabani sonuçlar alabilirsiniz, ayrıca gerekli)

Eğer bağlantı dinamik bir imleç türünü kullanarak ediyorsanız, o zaman gerçekten değiştirebilir. Eğer kayıtları sayfalarında tarama yaparken Birileri bu veritabanından bir kayıt silebilir. , Önlemek anlık imleç bir statik tür kullanın. Ben bu de bunu açıklayacağım sık var. Bu her zaman beni ve yer imi her zaman niye hatırlattı.

http://support.microsoft.com/kb/194973