Bu Not, odbc sürücüsü yazarlar için yönergeleri açıklanır. Genel Şartlar ve mfc veritabanı sınıflarını oluşturan odbc işlevleri ve çeşitli beklenen semantik bilgi varsayımlar özetlenmektedir. Üç CRecordset Açık modu (forwardOnly, anlık görüntü ve dinamik küme) desteklemek için gerekli sürücü işlevleri açıklanmıştır.
ODBC'ın imleç kitaplığı
Mfc veritabanı sınıflarını birçok durumda en düzey 1 odbc sürücüleri tarafından sağlanan işlevselliği aşan kullanıcı işlevselliği sunar. Neyse ki, ODBC's imleç kitaplığı kendisini veritabanı sınıflarını ve sürücü arasında katman ve otomatik olarak çok bu ek işlevsellik sağlayacaktır.
Örneğin, çoğu 1.0 sürücüleri geri kaydırma desteklemez. İmleç kitaplığı bunu algılayabilir ve sürücü satırları önbelleğe ve bunları SQLExtendedFetch fetch_prev çağrılarda istendiği gibi mevcut.
Bir başka önemli imleç kitaplığı bağımlılık konumlandırılmış güncelleştirmeler örnektir. Konumlandırılmış güncelleştirmeler 1.0 sürücülerin çoğu da yok, ancak imleç kitaplığı veri kaynağındaki geçerli önbellekteki veri değerlerini veya bir önbelleğe alınan zaman damgası değeri temel hedef satır tanımlamak update deyimleri üretecektir.
Sınıf kitaplığı asla birden çok satır kümeleri kullanır. Bu nedenle, birkaç SQLSetPos ifadeler her zaman satır kümesi satır 1 için uygulanır.
CDatabases
Her CDatabase bir tek hdbcayırır. ( CDatabase' ın ExecuteSQL işlevi kullanılırsa, bir hstmt geçici olarak tahsis edilir.) Böylece birden çok CDatabase' ın gerekirse, birden fazla hdbcs başına henv desteklenmelidir.
Veritabanı sınıflarını imleç kitaplığı gerektirir. Bu yansıtılan çağrıda SQLSetConnections sql_odbc_cursors, sql_cur_use_odbc.
SQLDriverConnect, SQL_DRIVER_COMPLETE CDatabase::Open tarafından veri kaynağına bağlantı kurmak için kullanılır.
Sürücü SQLGetInfoSQL_ODBC_API_CONFORMANCE gt; desteklemelidir SQL_OAC_LEVEL1, SQLGetInfosql_odbc_sql_conformance = > SQL_OSC_MINIMUM = .
Hareketleri CDatabase ve onun bağımlı kayıt kümeleri için desteklenmesi, SQLGetInfo SQL_CURSOR_COMMIT_BEHAVIOR ve SQL_CURSOR_ROLLBACK_BEHAVIOR sql_cr_preserveolması gerekir. Aksi takdirde, hareket denetimi gerçekleştirmek için girişimleri yok sayılır.
SQLGetInfo sql_data_source_read_only desteklenmelidir. "y" döndürürse, hiçbir güncelleştirme işlemlerini veri kaynağı üzerinde gerçekleştirilecek.
CDatabase açıldığında salt okunur veri kaynağı readonly ayarlama girişimi SQLSetConnectOptionsql_access_mode, sql_mode_read_only yapılacaktır .
SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR çağrısı ile sürücüsünden tanımlayıcıları tırnak içine almak gerekiyorsa, bu bilgileri gönderilmelidir .
Hata ayıklama amacıyla, SQLGetInfo sql_dbms_ver ve sql_dbms_name sürücü alınan.
SQLSetStmtOptionSQL_QUERY_TIMEOUT ve sql_async_enable bir CDatabase' ın hdbc üzerinde çağrılabilir. .
SQLError tüm argümanları null ile çağrılabilir.
Tabii ki, SQLAllocEnv, SQLAllocConnect, SQLDisconnect ve SQLFreeConnect desteklenmesi.
ExecuteSQL
Ek ayrılıyor ve geçici hstmt, azat ExecuteSQL SQLExecDirect, SQLFetch, SQLNumResultCol ve SQLMoreResultsçağırır. SQLCancel hstmt çağrılabilir.
GetDatabaseName
SQLGetInfo sql_database_name olarak adlandırılır.
BeginTrans, CommitTrans, geri alma
SQLSetConnectOptionİşlem isteği yapılırsa SQL_AUTOCOMMIT ve SQLTransactSQL_COMMIT sql_rollback ve SQL_AUTOCOMMIT çağrılacak .
CRecordsets
SQLAllocStmt, SQLPrepare, SQLExecute (için Açık ve Requery), SQLExecDirect (güncelleştirme işlemlerinde), SQLFreeStmt desteklenmelidir. Çeşitli zamanlarda ayarla sonuçları SQLNumResultCols ve SQLDescribeCol çağrılacak.
SQLSetParam yoğun biçimde parametre veri ve data_at_exec işlevleri bağlama için kullanılır.
SQLBindCol kapsamlı olarak kaydetmek için kullanılan sütun veri depolama konumları ile odbc çıkış.
İki SQLGetData çağrıları, sql_long_varchar ve SQL_LONG_VARBINARY veri almak için kullanılır. Sütun değeri toplam uzunluğu 0 cbMaxValue, ancak geçerli bir pcbValue SQLGetData arayarak bulmak ilk çağrı çalışır. PcbValue sql_no_totaltutuyorsa, bir özel durum. Aksi takdirde bir hglobal tahsis edilir ve tüm sonuç almak başka bir SQLGetData çağrısı yaptı.
Güncelleştirme
Kötümser kilitleme istenirse SQLGetInfo sql_lock_types sorgulanan. SQL_LCK_EXCLUSIVE desteklenmiyorsa, bir özel durum.
Bir CRecordset (anlık görüntü ya da değişken küme) güncelleştirme girişimlerinin ayrılacak ikinci bir hstmt neden olur. İkinci hstmtdesteklemeyen sürücüler için imleç kitaplığı bu işlevselliği benzetimini yapacak. Ne yazık ki, bu bazen ikinci hstmt' ın isteği işlerken önce tamamlanması için ilk hstmt geçerli sorgu zorlama anlamına gelebilir.
SQLFreeStmt sql_close ve aramaSQLFreeStmtSQL_RESET_PARAMS ve SQLGetCursorName güncelleştirme işlemleri sırasında çağrılacaktır.
OutputColumns CLongBinarys varsa, ODBC'ın data_at_exec işlevselliği desteklenmelidir. Bu, SQLExecDirect, SQLParamData ve SQLPutData sırasında veri sql_need_data dönen içerir.
SQLRowCount sadece 1 Rekor SQLExecDirect ile güncelleştirilmiş doğrulamak için yürüttükten sonra denir.
ForwardOnly imleçler
Sadece SQLFetch taşıma işlemleri için gereklidir. Not forwardOnly imleçler güncelleştirmeleri desteklemiyor.
Anlık imleçler
Anlık görüntü işlevselliği SQLExtendedFetch desteği gerektirir. Ne zaman bir sürücü değil SQLExtendedFetchdesteklemek ve gerekli desteği sağlamak yukarıda belirtildiği gibi odbc imleç kitaplığı algılar.
SQLGetInfo, SQL_SCROLL_OPTIONS SQL_SO_STATIC desteklemesi gerekir.
Dinamik imleçler
Dinamik açmak için gereken en düşük destek aşağıdadır:
SQL&GetInfo, sql_odbc_ver gt döndürmesi gerekir; "01".
SQLGetInfo, SQL_SCROLL_OPTIONS SQL_SO_KEYSET_DRIVEN desteklemesi gerekir.
SQLGetInfo, sql_row_updates "y" döndürmelidir.
SQLGetInfo, SQL_PS_POSITIONED_DELETE ve SQL_PS_POSITIONED_UPDATE SQL_POSITIONED_UPDATES desteklemesi gerekir.
Kötümser kilitleme isteniyorsa, ayrıca SQLSetPos çağrısı ile IRow 1, fRefresh false ve Flok SQL_LCK_EXCLUSIVE yapılacaktır.
Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre