proc編譯pc報錯
在main.pc的insert 函數前加上extern
如
extern void insert (char password_[6],char id_[20],int balance_);
編譯時加參數 -lecpg
③ PROC編譯
可以把問題描述清楚一點,這樣才能更快獲得幫助。
使用proc來轉換源文件的命令通常是:
proc parse=full USERID=user/pwd@dns sqlCHECK=SEMANTICS yourfile.pc include="/oracle/app/oracle/proct/9.2.0/precomp/public"
其中,parse=full一般是固定的,
USERID後面跟上連接到oracle資料庫的連接字元串,格式為:用戶/密碼@伺服器名
SQLCHECK=SEMANTICS 指明SQLCHECK參數,一般也是固定的
include=&quo肌埂冠忌攉渙圭惟氦隸t;/oracle/app/oracle/proct/9.2.0/precomp/public"指明預編譯時候需要的頭文件路徑
其中/oracle/app/oracle/proct/9.2.0是你的oracle數字路徑,後面的precomp/public是固定的
yourfile.pc 你想要轉換的使用嵌入式SQL編寫好的源文件。
執行之後,如果沒錯,就會生成.c源文件,編譯就可以了。
如果執行出錯,會生成*.lis文件,指出出錯的地方,按照錯誤說明修改之後再試。
需要注意相關環境變數要配置正確,.pc源文件里所用到的表,欄位,存儲過程等在資料庫中要存在,並且,連接上去的用戶要有相關表的訪問許可權。
④ proc的編譯
sqlcxt 這個變數沒有聲明
檢查你的C文件,是否聲明,或者是否賦值?
⑤ linux下,C++與proc的編譯出的靜態庫調用時報錯,求助
在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如: gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop 其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。
⑥ proc編譯報錯Duplicate symbol "sqlca" in files DataInput.o and DataInterface.o
看ld命令的提示信息,意思是你兩個目標文件中有相同的全局變數,所以,報重復定義錯誤。
使用proc轉換的時候,每個.pc文件,都會生成一個類型為sqlca的結構體變數,並且這個變數都是全局變數,你可以打開生成後的C源文件,搜索sqlca結構體看看。proc程序不會因為你多個.pc文件來重新對sqlca結構體變數重命名,這就導致每個源文件裡面都有一個相同名字的sqlca結構體全局變數,編譯的時候不會報錯,鏈接的時候就會報上面的錯誤了。
建議是把資料庫相關的操作都寫在一個文件中,這樣就不會產生類似的問題了。嵌入式SQL雖然寫起來方便,但是也不是任何項目都適用,它適合結構簡單,需要快速開發的項目,你這種如果需要在多個文件中都操作資料庫,就會有問題。
⑦ 怎麼在vs2008編譯已經用proc預編譯後的.c文件
你的lib庫沒有放進去,在項目設置裡面有個添加lib庫的文件和文件路徑的地方
把你sql鏈接庫放在那個位置
⑧ 編譯proc 出現這樣的錯誤是什麼原因
雖然我沒有看到你的具體的程序源代碼,但是根據我多年編寫程序源代碼的經驗,可以給你提供如下一些信息,供你參考。關於編程過程中出現的錯誤類型有很多種,其中最容易調試的程序錯誤是:
(1)、在編寫源程序過程中出現的各種語法錯誤。這種錯誤主要是由於剛剛開始學習編程,對編程語言的語句、以及語法結構還不是很清晰造成的,這種錯誤是最容易進行調試的,因為語法錯誤,編譯器連編譯都無法通過(通常會顯示出來具體是哪一行出現錯誤),這樣的話,你就可以直接到出錯的那一行進行修改源代碼了;
(2)、若是經過一段時間的上機練習,對初始編程已經較為熟練了、且語法錯誤較少了之後,之後就會遇到更為復雜、並且難於調試的語義錯誤。例如在 C 語言中,對於如下代碼:
void main( )
{
int n ;
scanf("%d", &n) ;
if( n == 100 )
printf(" n is 100 !\n") ;
else
printf(" n is not 100 !\n") ;
}
在邏輯判斷語句:if( n == 100) 中,如果誤將「==」(邏輯等於)寫成了「=」(賦值等於),那麼在 scanf("%d", &n) 語句中,無論你輸入的 n 等於多少,一旦執行 if 語句,那麼 將 100 這個數字賦給變數 n,則該邏輯表達式的值總是 1,程序的運行結果必定總是輸出:n is 100。
而該程序的實際思路是:從鍵盤輸入一個整數,如果該整數等於 100,則輸出:n is 100 !如果輸入的整數不等於 100 的話,則輸出:n is not 100 !
像這樣的邏輯錯誤(在編譯源程序時,C 語言編譯器是檢查不出來的),如果沒有豐富的程序調試經驗,程序調試起來就是非常困難的。
所以說,如果想學習編程,必須要勤於上機編輯、調試、運行程序,而不能夠只是在書本上閱讀程序。只有這樣,才能夠在較短的時間內,使自己的編程水平有一個較大的提高。
⑨ vc++6.0編譯時出現'proc' 不是內部或外部命令,也不是可運行的程序 或批處理文件。
如果你的Oracle在vc之後安裝的 則需要配置路徑。要把proc這個可執行文件包含到路徑中
具體的方法是 在工具下面找選項,在選項的頁面下 選擇可執行文件 這一項。然後將Oracle中proc文件的路徑 添加進去。這里說的不夠具體。你可以繼續查怎麼配置
雖然這個問題已經過去了很久。但希望給以後看的人一點啟示。
⑩ C++ 連接Oracle error LNK2019: unresolved external symbol _sqlcxt referenced in function _main
--取兩個日期間的工作天數
SELECT COUNT(*) INTO vn
FROM (SELECT vod + ROWNUM - 1 RN
FROM DUAL
CONNECT BY ROWNUM <= vnd - vod)
WHERE TO_CHAR(RN, 'D') BETWEEN 2 AND 6;
--返回數字
RETURN vn;
--異常判斷並返回-1
EXCEPTION
WHEN OTHERS THEN
RETURN -1;
END fun_get_workdays;
然後select id,fun_get_workdays(begin_date date, end_date date) from table
