Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92
Özet
SQLPrepare execution için bir SQL string hazırlayır.
Syntax
SQLRETURN SQLPrepare(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength);
Arguments
StatementHandle
[Giriş] Deyim tanıtıcısı.
StatementText
[Giriş] SQL metin dizisi.
TextLength
[Giriş] Karakter cinsinden *StatementText uzunluğu.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ya da SQL_INVALID_HANDLE.
Diagnostics
SQLPrepare SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_STMT HandleType ve StatementHandleile SQLGetDiagRec çağrılarak elde edilebilir. Aşağıdaki tablo, SQLPrepare tarafından sıkça duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyon bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 01S02 | Seçenek değeri değiştirildi | Uygulama çalışma koşulları nedeniyle belirtilen deyim özniteliği geçersizdi, bu nedenle benzer bir değer geçici olarak değiştirildi. (SQLGetStmtAttr , geçici olarak yerine getirilen değerin ne olduğunu belirlemek için çağrılabilir.) Yerine geçen değer, imleç kapatılana kadar StatementHandle için geçerlidir. Değiştirilebilecek ifade nitelikleri şunlardır: SQL_ATTR_CONCURRENCY SQL_ATTR_CURSOR_TYPE SQL_ATTR_KEYSET_SIZE SQL_ATTR_MAX_LENGTH SQL_ATTR_MAX_ROWS SQL_ATTR_QUERY_TIMEOUT SQL_ATTR_SIMULATE_CURSOR (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| 21S01 | Değer listesi, sütun listesiyle eşleşmiyor | * StatementText bir INSERT ifade içeriyordu ve eklenecek değer sayısı türetilmiş tablonun derecesine uyuşmuyordu. |
| 21S02 | Türetilmiş tablonun derecesi sütun listesiyle eşleşmiyor | * StatementText bir CREATE VIEW ifade içeriyordu ve belirtilen isim sayısı, sorgu belirtisiyle tanımlanan türetilmiş tablo derecesi kadar değildir. |
| 22018 | Atama belirtimi için geçersiz karakter değeri | * StatementText , literal veya parametre içeren bir SQL ifadesi içeriyordu ve bu değer, ilgili tablo sütununun veri tipiyle uyumsuzdu. |
| 22019 | Geçersiz çıkış karakteri | StatementText argümanı, WHERE cümlesinde bir ESCAPE ile LIKE bir önlem içeriyordu ve ESCAPE'den sonraki kaçış karakterinin uzunluğu 1'e eşit değildi. |
| 22025 | Geçersiz çıkış sırası | StatementText argümanı, WHERE cümlesinde "LIKEpattern valueESCAPEescape karakter" içeriyordu ve desen değerindeki escape karakterinden sonraki karakter ne "%" ne de "_" idi. |
| 24000 | Geçersiz imleç durumu | (DM) StatementHandle üzerinde bir imleç açıktı ve SQLFetch veya SQLFetchScroll çağrıldı. StatementHandle'da bir imleç açıktı, ancak SQLFetch veya SQLFetchScroll çağrılmamıştı. |
| 34000 | Geçersiz imleç adı | * StatementMetin bir pozisyon DELETE veya konumlanmış UPDATEbir yer içeriyordu ve hazırlanan ifadede referans verilen imleç açık değildi. |
| 3D000 | Geçersiz katalog adı | StatementText içinde belirtilen katalog adı geçersizdi. |
| 3F000 | Geçersiz şema adı | StatementText içinde belirtilen şema adı geçersizdi. |
| 42000 | Söz dizimi hatası veya erişim ihlali |
*
StatementText , hazırlanmamış bir SQL deyimi içeriyordu veya söz dizimi hatası içeriyordu. * StatementText , kullanıcının gerekli ayrıcalıklara sahip olmadığı bir ifade içeriyordu. |
| 42S01 | Temel tablo veya görünüm zaten var | * StatementText bir CREATE TABLE veya CREATE VIEW ifadesi içeriyordu ve belirtilen tablo adı veya görünüm adı zaten mevcuttu. |
| 42S02 | Temel tablo veya görünüm bulunamadı |
*
StatementText bir DROP TABLE veya bir DROP VIEW ifade içeriyordu ve belirtilen tablo adı veya görünüm adı mevcut değildi. * StatementText bir ALTER TABLE ifade içeriyordu ve belirtilen tablo adı yoktu. * StatementText bir CREATE VIEW ifade içeriyordu ve sorgu belirtisiyle tanımlanan bir tablo adı veya görünüm adı yoktu. * StatementText bir CREATE INDEX ifade içeriyordu ve belirtilen tablo adı yoktu. * StatementText bir GRANT veya REVOKE ifadesi içeriyordu ve belirtilen tablo adı veya görünüm adı mevcut değildi. * StatementText bir SELECT deyimi içeriyordu ve belirtilen tablo adı veya görünüm adı yoktu. * StatementText bir DELETE, INSERT, veya UPDATE ifade içerir ve belirtilen tablo adı mevcut değildir. * StatementText bir CREATE TABLE ifade içeriyordu ve bir kısıtlamada belirtilen bir tablo (oluşturulan tablodan başka bir tabloya atıfta bulunan) mevcut değildi. |
| 42S11 | Dizin zaten var | * StatementText bir CREATE INDEX ifade içeriyordu ve belirtilen indeks adı zaten mevcuttu. |
| 42S12 | Dizin bulunamadı | * StatementText bir DROP INDEX ifade içeriyordu ve belirtilen indeks adı mevcut değildi. |
| 42S21 | Sütun zaten var | * StatementText bir ALTER TABLE ifade içeriyordu ve ADD maddesinde belirtilen sütun benzersiz değildir veya temel tabloda mevcut bir sütunu tanımlar. |
| 42S22 | Sütun bulunamadı |
*
StatementText bir CREATE INDEX ifade içeriyordu ve sütun listesinde belirtilen sütun adlarından biri veya birkaçının varlığı yoktu. * StatementText bir GRANT or REVOKE ifadesi içeriyordu ve belirli bir sütun adı yoktu. * StatementText bir SELECT, DELETE, INSERT, veya UPDATE ifade içeriyordu ve belirtilmiş bir sütun adı yoktu. * StatementText bir CREATE TABLE ifade içeriyordu ve bir kısıtlamada belirtilen sütun (oluşturulan tablo dışında bir tabloya atıfta bulunan) mevcut değildi. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY008 | İşlem iptal edildi |
StatementHandle için zaman uyumsuz işleme etkinleştirildi. Fonksiyon çağrıldı ve çalıştırma tamamlanmadan önce StatementHandleüzerinde SQLCancel veya SQLCancelHandle çağrıldı ve ardından StatementHandle üzerinde fonksiyon tekrar çağrıldı. İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. |
| HY009 | Geçersiz null işaretçi kullanımı | (DM) AçıklamaMetin bir null işaretti. |
| HY010 | İşlev dizisi hatası | (DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon, SQLPrepare fonksiyonu çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. (DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY090 | Geçersiz dize veya arabellek uzunluğu | (DM) TextLength bağımsız değişkeni 0'a eşit veya 0'a eşitti ancak SQL_NTS eşit değildi. |
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYC00 | İsteğe bağlı özellik uygulanmadı | Eşzamanlılık ayarı, tanımlanan imleç türü için geçersizdi. SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak, SQL_ATTR_CURSOR_TYPE deyimi özniteliği ise sürücünün yer işaretlerini desteklemediği bir imleç türüne ayarlandı. |
| HYT00 | Zaman aşımı süresi doldu | Zaman aşımına dayanan dönem, veri kaynağı sonuç kümesini döndürmeden önce sona erdi. Zaman aşımı süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT aracılığıyla ayarlanır. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
| IM017 | Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı | Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır. |
| IM018 | SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. | Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır. |
Comments
Uygulama, hazırlanmak üzere veri kaynağına bir SQL ifadesi göndermek üzere SQLPrepare çağırır. Hazırlıklı infaz hakkında daha fazla bilgi için Hazırlıklı İdam bölümüne bakınız. Uygulama, SQL ifadesinde bir veya daha fazla parametre işaretçisi içerebilir. Parametre işaretçisi eklemek için uygulama SQL dizisine uygun konumda bir soru işareti (?) gömülür. Parametreler hakkında bilgi için bkz. Deyim Parametreleri.
Note
Bir uygulama hazırlamak için SQLPrepare ve COMMIT veya ROLLBACKifadesi göndermek için SQLExecute kullanırsa, DBMS ürünleri arasında birlikte çalışabilir olmaz. Bir işlemi işlemek veya geri almak için SQLEndTran'ı çağırin.
Sürücü, ifadeyi veri kaynağının kullandığı SQL biçimini kullanacak şekilde değiştirebilir ve ardından hazırlanmak üzere veri kaynağına gönderebilir. Özellikle, sürücü belirli özellikler için SQL sözdizimini tanımlamak için kullanılan kaçış dizilerini değiştirir. (SQL ifade dilbilgisinin bir açıklaması için bkz. ODBC'de Kaçış Dizileri ve Ek C: SQL Grameri.) Sürücü için, bir ifade tutucu, gömülü SQL kodundaki bir ifade tanımlayıcısına benzer. Veri kaynağı ifade tanımlayıcılarını destekliyorsa, sürücü bir ifade tanımlayıcısı ve parametre değerlerini veri kaynağına gönderebilir.
Bir ifade hazırlandıktan sonra, uygulama sonraki fonksiyon çağrılarında ifade için ifade tutamacını kullanır. Statement handle ile ilişkili hazırlanmış ifade, SQL Xecute çağrısı ile yeniden çalıştırılabilir; ta ki uygulama SQL_DROP seçeneğiyle SQLFreeStmt çağrısıyla veya ifade tutamacı SQLPrepare, SQLExecDirect veya katalog fonksiyonlarından birine (SQLColumns, SQLTables vb.) çağrıda kullanılana kadar tekrar çalıştırılabilir. Uygulama bir ifade hazırladıktan sonra, sonuç kümesinin formatı hakkında bilgi talep edebilir. Bazı uygulamalar için, SQLPrepare'den sonra SQLDescribeCol veya SQLDescribeParam çağırmak, SQLExecute veya SQLExecDirect'ten sonra fonksiyonu çağırmak kadar verimli olmayabilir.
Bazı sürücüler, uygulama SQLPrepare çağırdığında sözdizimi hatalarını veya erişim ihlallerini döndüremez. Bir sürücü, sözdizimi hatalarını ve erişim ihlallerini halledebilir, sadece sözdizimi hatalarını ya da ne sözdizimi hatalarını ne de erişim ihlallerini halledebilir. Bu nedenle, bir uygulamanın SQLNumResultCols, SQLDescribeCol, SQLColAttribute ve SQLExecute gibi sonraki ilgili fonksiyonları çağırırken bu koşulları yönetebilmesini gerekir.
Sürücünün ve veri kaynağının yeteneklerine bağlı olarak, parametre bilgileri (örneğin veri türleri) ifade hazırlanırken (tüm parametreler bağlanmışsa) veya yürütüldüğünde (tüm parametreler sınırlandırılmamışsa) kontrol edilebilir. Maksimum birlikte çalışabilirlik için, bir uygulama eski bir SQL ifadesine uygulanan tüm parametreleri kaldırıp aynı ifade üzerinde yeni bir SQL ifadesi hazırlamadan önce çözmelidir. Bu, eski parametre bilgisinin yeni ifadeye uygulanmasından kaynaklanan hataları önler.
Important
Bir işlem, ya açıkça SQLEndTran çağrısı ile ya da otomatik commit modunda çalışarak, veri kaynağının bağlantıdaki tüm açıklamalar için erişim planlarını silmesine neden olabilir. Daha fazla bilgi için SQLGetInfo ve İşlemlerin İmleçler ve Hazırlanmış Cümleler üzerindeki SQL_CURSOR_COMMIT_BEHAVIOR ve SQL_CURSOR_ROLLBACK_BEHAVIOR bilgi türlerine bakınız.
Kod Örneği
SQLBindParameter, SQLPutData ve SQLSetPos bölümlerine bakınız.
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Bir ifade kolu tahsis etmek | SQLAllocHandle Fonksiyonu |
| Sonuç kümesindeki bir sütuna arabellek bağlama | SQLBindCol İşlevi |
| Bir tamponu bir parametreye bağlama | SQLBindParameter Fonksiyonu |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| İşleme veya geri alma işlemini yürütme | SQLEndTran İşlevi |
| SQL ifadesinin yürütülmesi | SQLExecDirect Fonksiyonu |
| Hazırlanmış bir SQL deyimini yürütme | SQLExecute İşlevi |
| Bir ifadenin etkilendiği satır sayısını geri döndürmek | SQLRowCount Fonksiyonu |
| İmleç adı ayarlama | SQLSetCursorName İşlevi |