---- 一、系統設置:
---- 1. 用SQL NET 設置ORACLE數據庫所在服務器的IP地址別名,這里假設名字是oracle1;
---- 2. 建立ORACLE ODBC數據源;
---- 進入控制面板的ODBC數據源,然后點擊Systen DSN,再點擊Add按鈕選擇Microsoft ODBC Driver Oracle,在Data Source Name框中輸入數據源名(test),在User Name框中輸入ORACLE數據用戶名(假設為user1)最后在Connect String框中輸入在SQL NET中建立的ORACLE數據庫別名oracle1;
---- 建立好以上兩步后,則DELPHI的BDE Administrator中自動生成一個test數據接口,如下圖:
---- 二、用DELPHI開發讀取ORACLE數據庫數據的CGI 程序
---- 進入DELPHI編程環境,去掉FORM頁及其它控件,然后輸入以下程序。
program testcgi;
{$apptype console}
uses
SysUtils, DBtables;
var
Table1: TTable;//用于讀ORACLE數據庫數據
Database1: TDatabase;//用于定義ORACLE別名及用戶名和口令
i,ss,code:integer;
my,clearcase/" target="_blank" >cc:string;
begin
writeln(′CONTENT-TYPE: TEXT/HTML′);//CGI程序要求的數據頭信息
writeln;//保留一行空格
my:=paramstr(1);//讀入JAVA傳來的信息
Table1:=TTable.Create(nil);//創建Table控件
Database1:=TDatabase.Create(nil);//創建Database控件
try
Database1.aliasname:=′test′;//ORACLE別名
Database1.databasename:=′test′;
Database1.Params.Clear;
Database1.Params.add(′USER NAME=user1′);//用戶名
Database1.Params.add(′PASSWORD=userpassword′);//口令
Database1.loginprompt:=false;
Database1.connected:=true;
Database1.open; //打開數據庫通道
Table1.databasename:=′test′;
Table1.tablename:=′cbkt′;//ORACLE表名
table1.Active := True;
Table1.open;//打開ORACLE表
Table1.first;
//計算滿足條件井數
i:=0;
while (not table1.eof) do
begin
if (Table1.FieldByName(′ny′).asstring=my) then
begin
write(Table1.FieldByName(′jh′).asstring+′,′);
val(Table1.Fields[2].asstring,ss,code);
if ss>0 then
write(ss*100)
else
write(′0.0′);
write(′,′);
val(Table1.Fields[3].asstring,ss,code);
if ss >0 then
write(ss*100)
else
write(′0.0′);
end;
table1.next
end;
finally
table1.close;
table1.free;
end;
end.
---- 把以上程序編譯后拷入服務器的CGI目錄。
---- 三、JAVA部分程序
//test.java 編寫:王兵 1999/11/30
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.applet.*;
public class test extends Applet {
。。。。。。。。
。。。。。。。
。。。。。。
//調用testcgi.exe實現讀入ORACLE數據
public boolean action(Event evt,Object obj)
{ String s1=(String)obj;
if(s1=="取數據")
return test_xx("http://10.65.76.64/scripts/testcgi.exe?"+
year.getSelectedItem());
return true;
}
public boolean test_xx(String post)
{。。。。。。。。。。。
。。。。。。。。。。。
try{DataInputStream is;//數據輸入流
URL url;//通過網傳數據
url=new URL(post);
URLConnection connection=url.openConnection();//打開數據流
is=new DataInputStream(connection.getInputStream());
String inputline;
mcv.error=null;
if((inputline=is.readLine())==null)//無數據
{mcv.error=new String("無數據可讀!!!");
status_field.setText("無數據可讀!!!");
mcv.repaint();//畫布刷新
return true;
}
status_field.setText("取x,y數據...");
if ((inputline=is.readLine())==null)
{mcv.error=new String("無數據可讀!!!");
mcv.repaint();//畫布刷新
return true;
}
mcv.bktx=new String[10];
mcv.bkty=new String[10];
mcv.bktjh=new String[10];
status_field.setText("取圖形數據...");
js=1;//計井數
for (i=0;i< 10;i++)
{//每行3個字段
inputline=is.readLine();
if (inputline==null) {break;}
p1=inputline.indexOf(′,′);
p2=inputline.lastIndexOf(′,′);
mcv.bktjh[js]=inputline.substring(0,p1);
mcv.bktx[js]=inputline.substring(p1+1,p2).trim();
mcv.bkty[js]=inputline.substring(p2+1).trim();
status_field.setText("bktx["+
String.valueOf(js)+"]"+mcv.bkty[js]);
js=js+1;
}
is.close();
status_field.setText("OK1");
mcv.repaint();
}catch(MalformedURLException me)
{System.err.println("MalformedURLException: "+me);}
catch(IOException ioe){
System.err.println("IOException: "+ioe);
}catch(NumberFormatException e)
{if(mcv.error==null)
mcv.error=new String("數據格式出錯B!!!"+e);
status_field.setText(mcv.error);
mcv.repaint();
}
status_field.setText("數據讀完!!!");
return true;
}
}
。。。。。。。。。。。。。
。。。。。。。。。。。。
---- 四、最后在自己的起始頁HTML文件中加入如下程序段就行了。
< !test.html 1999/11/30 >
< HTML >
< HEAD >
。。。。。。
。。。。。。
< BODY >
。。。。。。
< APPLET CODE="test.class" WIDTH=200 HEIGHT=40 >< /APPLET >
。。。。。。
< /BODY >
。。。。。。
。。。。。。
< /HTML >
---- 以上程序在IBM 330 Server上調試通過,開發環境Visual J++ 6.0。
大慶采油六廠采油工藝研究所 王兵
原文轉自:http://www.anti-gravitydesign.com