藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

AIX:5.1
DB2:7.21
數據庫:Emp
操作表:info
AIX下編譯嵌入式DB2 C程序,proc.sqc。

預編譯:embprep proc 得到proc.bnd和proc.c文件,編譯沒有錯誤發生。
編譯:xlc -o proc proc.c -ldb2 編譯正確,生成執行文件proc。
執行proc一切正常。

因為涉及到可能的移植問題,於是測試將數據庫Emp Drop掉(db2 drop database Emp),再重新建原來相同的數據庫Emp和表info,建成後執行proc,程序可正常連接數據庫,可在對表info操作時(如select)返回SQLCODE錯誤=-805,也就是說無法對表進行操作。重新編譯該程序後,運行正常!

請問:
(1)這是什麼原因呢?
(2)編譯後的二進制文件為什麼就不認後建的相同的數據庫了呢?
(3)還有-805錯誤碼的意思是什麼呢?
(4)還有..還有在DB2下怎樣查找錯誤碼的含義(如informix下的finderr nnnnxx)?
(5)...:)

不勝謝謝!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

Up!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

Are you 閻星百?

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

程序一般是與具體數據庫無關
所以我想你可能有其它方面問題

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

是小夏吧!怎麼樣?在那邊還挺的住?

對了,聽說你今年運氣不錯,年前中了台二十九寸的大「鞋盒」,真是恭喜!恭喜啊!!!:)

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

DB2的嵌入式C程序,感覺真是挺煩的,而且目前來看好像真的不知道怎麼移植才好,不像Informix下的C程序,直接下傳執行碼就行了,DB2的程序卻不一樣。預編譯時,同時生成一個DBRM(DATABASE REQUEST MODULE),與數據庫有一個BIND的過程,因此在這個環境下編譯的程序,換到另一個環境下執行會返回-805錯誤的!(我想,是不是將編譯環境的數據庫IMPORT到新環境中,而不是新建,可能就不會有錯了呢?)

這個問題查了些資料也沒有解決辦法,希望在這得到個答案吧!

有時間的話,你看看這個DB2編譯的過程吧,是不是與其它的數據庫是有些不一樣呢!?

http://www.ims.state.ne.us/dba/sqlanareso.htm

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

-->

無雙,謝謝你的回復!
DB2 下的C程序,我是剛剛接觸,真是不知道如何才能實現程序和數據庫無關的運行,而不需要在新環境下還要重新編譯了!

有沒有什麼解決的辦法呢?!!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

AIX 下的DB2數據庫不太好用,它在編譯時會產生一個PKG存放於數據庫中,
並且會對它打上時間戳。如果從新建庫獲建表的話都會破壞時間戳,必須從新編譯或rebind,以產生新的PKG。

在db2環境下
? SQL0805
可以查看錯誤代碼!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

是啊,實在沒怎麼理解這個時間戳的真正用處何在!

這樣說的話,如果執行碼要在N台AIX上運行的話,那豈不是要將源碼在N台AIX上運行才可以,而且如果源碼改變的後,則得要在N台AIX上再編譯!這簡單是太可怕了!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

應該是這樣的hasjing兄說的非常準確.佩服~~

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

目前只能保留預編譯生成的proc.bnd文件,重新BIND數據庫
DB2 BIND proc.bnd解決問題,不過,還是覺得並不是解決問題的辦法!

AIX下編譯嵌入式DB2 C程序,編譯時出現的怪問題???

時間戳的目的是為了保證db2數據庫優化策略的一致性,而且PKG的內部名稱
是SQC文件的前八個字母,所以在開發時要當心每個模塊的名字前八個字母不能相同!否則會產生PKG覆蓋,會產生818的錯誤代碼!

所以IBM的東西雖好,但是規矩太多!



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com