• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 基于ODBC的通用數據庫管理程序

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    #!/usr/bin/perl print Content-type: text/html\n\n; #setver $http = http://$ENV{'SERVER_NAME'}$server_port; $cgiurl = $http/cgi-bin/test4.pl; #cgi的URL exp :http://ssl ($disk,$root,$script) =split(/\\/,__FILE__); $filehead = $disk\/$root\/$
    #!/usr/bin/perl
    print "Content-type: text/html\n\n";

    #setver
    $http = "http://$ENV{'SERVER_NAME'}$server_port";
    $cgiurl = "$http/cgi-bin/test4.pl"; #cgi的URL exp :http://ssl
    ($disk,$root,$script) =split(/\\/,__FILE__);
    $filehead = "$disk\/$root\/$script"; #exp:d:/inetpub/cgi-bin
    $allow_html = 0; # 1=允許使用html語法 0=no
    $time_miss = +0; # Server時區調整

    #program
    &get_form;
    &set_var;
    use Win32::ODBC;
    #$DSN = "mdbtest" if (!$DSN);
    $DSN = "DSN eq test;UID eq test;PWD eq test;" if (!$DSN); #i use sqlserver
    $DSN1=$DSN;
    $DSN=~s / eq /=/g;
    $DSN1=~s / /%20/g;
    #創建一個DSN文件頭
    my $db = Win32::ODBC->new($DSN);
    #測試是否存在此DSN
    if (! $db){
    print "Failed to Connect $DSN\n";
    Win32::ODBC::DumpError();
    #如果不存在則退出程序
    die;
    }#else{print "聯結正確!";exit;}
    $DSN=$DSN1;
    if ($job eq "look") {
    &look;
    $db->Close();
    exit;
    }elsif ($job eq "type"){
    &type;
    $db->Close();
    exit;
    }elsif ($job eq "stat"){
    &stat;
    $db->Close();
    exit;
    }elsif ($job eq "help"){
    &help;
    $db->Close();
    exit;
    }elsif ($job eq "log"){
    &log;
    $db->Close();
    exit;
    }
    &main;
    $db->Close();
    exit;

    sub log{
    $sql="select usedate as 時間,host as 使用者,sqlcommand as SQL命令 from log order by usedate";
    &look;
    }

    sub help{
    print <<"EOF";
    <html><body>
    <pre>

    sql語句簡介:
    select [ALL|DISTINCT|DISTINCTROW|][TOP n ]字段列表|* from 表名
    [where 條件]
    [order by 字段名 ][DESC]]
    [group by 字段名]

    其中:條件 數字型 字段名 操作符 值(lt < ,gt >,eq =, le <=,ge >=,ne <>)
    字符型 字段名 like '值' 如加%號為模糊條件
    日期型 TO_CHAR(字段名,'YYYYMMDD HH24:MI:SS') > '20000120 09:01:00'
    謂詞 ALL 返回所有數據,默認值
    DISTINCT 省略選擇字段中包含重復數據的記錄
    DISTINCTROW 省略基于整個重復記錄的數據,而不只是基于重復字段的數據。
    TOP n 返回指定記錄數
    標頭 用于代替字段名,語法: 字段名 as 標頭
    CREATE TABLE 表名(字段名 字段類型(長度)[,字段名 字段類型(長度)...])
    drop table 表名 用途:刪除表 注:刪除后無法恢復
    TRUNCATE TABLE 表名 用途:清除表中的所有數據但不刪除這個表
    ALTER TABLE 表名 ADD 字段名 字段類型 NULL
    用途:給指定的表增加一個字段,注意:NULL參數是必須有的
    INSERT INTO 表名 (字段列表) VALUES (字段值列表) 用途:增加記錄,分隔用,分隔
    DELETE * from 表名 WHERE 條件 用途:刪除符合條件的記錄 注意:如不提供條件,將刪除所有記錄
    update 表名 set 字段=字段值[,字段=字段值] where 條件
    用途:更新符合條件的記錄值,注意:如不提供條件將更新所有記錄
    SELECT *|字段列表 INTO 新表名 FROM 舊表名 用途:拷貝整個表或指定字段的表

    字段類型:
    數據類型 存儲大小 描述
    BINARY 每個字符占一個字節 任何類型的數據都可存儲在這種類型的字段中。不需數據轉換(例如,轉換到文本數據)。數據輸入二進制字段的方式決定了它的輸出方式。
    BIT 1 個字節 Yes 和 No ,以及只包含這兩個數值之一的字段。
    BYTE 1 個字節 介于 0 到 255 之間的整型數。
    COUNTER 4 個字節 每當有新記錄添加至表中時,由 Microsoft Jet 數據庫引擎自動增加數值。在 Microsoft Jet 數據庫引擎中,此數值的數據類型為 Long。
    CURRENCY 8 個字節 介于 ?-?922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間的符號整數。
    DATETIME
    (清參閱 DOUBLE ) 8 個字節 介于 100 到 9999 年的日期或時間數值。
    GUID 128 個位 用于遠程過程調用的唯一識別數字。
    SINGLE 4 個字節 單精度浮點數,負數范圍是從 -3.402823E38 到 -1.401298E-45,正數從1.401298E-45 到 3.402823E38,和 0。
    DOUBLE 8 個字節 雙精度浮點數,負數范圍是從 -1.79769313486232E308 到 -4.94065645841247E-324,正數從 4.94065645841247E-324 到 1.79769313486232E308,和 0。
    SHORT 2 個字節 介于 -32,768 到 32,767 的短整型數。
    LONG 4 個字節 介于 -2,147,483,648 到 2,147,483,647 的長整型數。
    LONGTEXT 每個字符占一個字節 從零到最大 1.2 千兆字節。
    LONGBINARY 視實際需要而定 從零到最大 1.2 千兆字節。用于 OLE 對象。
    TEXT 每個字符占一個字節 長度從 0 到 255 個字符。

    標準函數:avg(),count(),sum(),max(),min() 括號內為字段名
    技巧:
    vote BETWEEN 7 AND 10 等同于vote>6 and vote<11
    username IN ('Bill Gates','President Clinton')只取其中之一
    CONVERT(CHAR(8),price) 將其它類型的數據轉型為指定長度的字符型
    site_name LIKE '[A-M]%' 則只取首字符為A至M的記錄
    site_name LIKE '[ABC]%' 則只取首字符為A或B或C的記錄
    site_name LIKE '[C-FY]%' 則只取首字符為C至F或Y的記錄
    site_name LIKE '[^Y]%' 要得到那些名字不以Y開頭的記錄
    site_name LIKE 'M_crosoft' 通過使用下劃線字符(_),你可以匹配任何單個字符
    如果你想匹配百分號或下劃線字符本身,你需要把它們括在方括號中。如果你想匹配連字
    符(-),應把它指定為方括號中的第一個字符。如果你想匹配方括號,應把它們也括在方括號中。
    TTRIM()和LTRIM(),可以用來從字符串中剪掉空格。函數LTRIM()去除應該字符串前面的
    所有空格;函數RTRIM()去除一個字符串尾部的所有空格。
    日期型常數應形式為 #12/25/2000 11:25:32#

    <center><font color=red>(C)Copyright by zengh 1999-2000</font></center>
    </pre>
    </body></html>
    EOF
    }
    sub stat {
    @tables=sort $db->TableList;
    print "<html><body><center><h4>數據表
    (共$#tables個)</h4></center><hr>";
    $yes=0;
    foreach (@tables) {
    if ($_ ne 'log') {
    print "<a href=$cgiurl?job=look&dsn=$DSN&sql=select%20top%20100%20*%20%20from%20$_ target=look>$_</a>
    \n";
    }else{$yes=1;}
    }
    if ($yes=0) {#如果不存在LOG這個表則建立
    $sql="create table log (usedate datetime,host char(20),sqlcommand char(255))";
    if ($db->Sql($sql)) {
    print "sql錯誤:$sql\n
    ";
    $db->DumpError();
    $db->Close();
    exit;
    }
    }
    print "<hr>點擊表名顯示其記錄<hr>";

    print "</body></html>";
    }
    sub look{
    @tables=sort $db->TableList;
    if (!$sql) {
    $table=@tables[0];
    $table=@tables[1] if ($#tables>=1 and @tables[0] eq "log");
    $sql="select top 100 * from ".$table;
    }
    $sql=~s / eq /=/g;
    $sql=~s / ne /<>/g;
    $sql=~s / lt /</g;
    $sql=~s / gt />/g;
    $sql=~s / le /<=/g;
    $sql=~s / ge />=/g;

    if ($db->Sql($sql)) {
    print "sql錯誤:$sql\n
    ";
    $db->DumpError();
    $db->Close();
    exit;
    }
    if (! ($sql=~/select|into|/i)) {
    print "$sql語句執行成功!!";
    $db->Close();
    exit;
    }
    @fieldname=$db->FieldNames();
    print "<html><body><center><h2>返回狀態情況<h2></center><hr>";
    print "<table width=100% border=1><tr><td>no.</td>";
    foreach (@fieldname) {
    print "<td>$_</td>";
    }
    print "</tr>";
    $i=0;
    while ($db->FetchRow()){
    $i++;
    %fieldmemo=$db->DataHash;
    print "<tr><td>$i</td>";
    foreach (@fieldname) {
    print "<td>$fieldmemo{$_}</td> ";
    }
    print "</tr>";
    }
    print "</table>";
    print "<hr>表屬性";
    print "<table border=1>";
    my(%type) = $db->ColAttributes($db->SQL_COLUMN_TYPE);
    my(%len) = $db->ColAttributes($db->SQL_COLUMN_LENGTH);
    my(%null) = $db->ColAttributes($db->SQL_COLUMN_NULLABLE);
    foreach $field (sort @fieldname) {
    if ($type{$field}==12) {$fieldtype="文本";}
    elsif ($type{$field}==-1){$fieldtype="備注/超級鏈接";}
    elsif ($type{$field}==4){$fieldtype="數字/自動編號";}
    elsif ($type{$field}==11){$fieldtype="日期/時間";}
    elsif ($type{$field}==2){$fieldtype="貨幣";}
    elsif ($type{$field}==-7){$fieldtype="是/否";}
    elsif ($type{$field}==-4){$fieldtype="OLE對象";}
    elsif ($type{$field}==1){$fieldtype="文本";}
    else{$fieldtype=$type{$field};}
    print "<TR><TD>$field</td><TD>$fieldtype</td><TD>$len{$field}</td><TD></tr>";
    }
    print "</table>";
    print "</body></html>";
    if ($sql ne "select usedate as 時間,host as 使用者,sqlcommand as SQL命令 from log order by usedate" and $sql !=~"select top 100 * from") {
    $sql1="insert into log (usedate,host,sqlcommand) values ('$daten $timen','$userip','$sql')";
    if ($db->Sql($sql1)) {
    print "sql錯誤:$sql\n
    ";
    $db->DumpError();
    $db->Close();
    exit;
    }
    }
    }

    sub type{
    print <<"EOF";
    <html><body>
    <FORM METHOD=POST ACTION="$cgiurl?job=look&dsn=$DSN" target="look">
    SQL語句:<INPUT TYPE="text" NAME="sql" size=60>
    <INPUT TYPE="submit" value="確定"><INPUT TYPE="reset" value="重寫">
    </FORM>
    <a href=$cgiurl?job=stat&dsn=$DSN target="stat">刷性狀態</a>-----
    <a href=$cgiurl?job=help target="look">幫助</a>-----
    <a href=$cgiurl?job=log&dsn=$DSN target="look">日志</a>
    </body></html>
    EOF
    }
    sub main {
    print <<"EOF";
    <html>
    <head>
    <title>odbc test</title>
    <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
    </head>
    <frameset cols="643,*">
    <frameset rows="*,25%">
    <frame name="look" src="$cgiurl?job=look&dsn=$DSN">
    <frame name="type" target="look" src="$cgiurl?job=type&dsn=$DSN">
    </frameset>
    <frame name="stat" src="$cgiurl?job=stat&dsn=$DSN">
    <noframes>
    <body>
    <p>This page uses frames, but your browser doesn't support them.</p>
    </body>
    </noframes>
    </frameset>
    </html>
    EOF
    }

     

    ##########
    #subs program
    ##########
    sub set_var {
    $job =&get_var('job' ,'\n|‖');
    $sql =&get_var('sql' ,'\n');
    $DSN =&get_var('dsn' ,'\n');

    $userip=$ENV{'REMOTE_ADDR'};

    ($secn,$minn,$hourn,$dayn,$monn,$yearn,$weekn,$yeardayn,$isdst) = localtime(time+(3600*$time_miss));
    $monn=$monn+1;
    if ($monn<10) {$monn="0$monn";}
    if ($dayn<10) {$dayn="0$dayn";}
    if ($hourn<10) {$hourn="0$hourn";}
    if ($minn<10) {$minn="0$minn";}
    if ($secn<10) {$secn="0$secn";}
    $yearn+=1900;
    $daten="$monn/$dayn/$yearn";
    $timen="$hourn\:$minn\:$secn";
    }

    ############
    sub get_form {
    @querys = split(/&/, $ENV{'QUERY_STRING'});
    foreach (@querys) {
    ($name,$value) = split(/=/, $_);
    $value = &decode($value);
    $value = &filterhtml($value);
    &setvaluetoform($name, $value);
    }

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/, $buffer);
    foreach (@pairs) {
    ($name, $value) = split(/=/, $_);
    $value = &decode($value);
    $value = &filterhtml($value);
    &setvaluetoform($name, $value);
    }

    @cookies = split(/; /, $ENV{HTTP_COOKIE});
    foreach $cookies (@cookies) {
    ($name, $value) = split(/=/, $cookies);
    $value = &decode($value);
    $value = &filterhtml($value);
    &setvaluetoform($name, $value);
    }
    }
    ############
    sub decode {
    local($return)=$_[0];
    $return =~ tr/+/ /;
    $return =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    return $return;
    }
    ##########
    sub filterhtml {
    local($return)=$_[0];
    $return =~ s/<!--(.|\n)*-->//g;
    if ($allow_html != 1) {
    $return =~s/<([>]|\n)*>//g;
    }
    return $return;
    }
    ##########
    sub setvaluetoform {
    if ($FORM{$_[0]}) {
    print "\$_[0]=$_[0]\n
    ";
    print "\$_[1]=$_[1]\n
    ";
    $FORM{$_[0]}="$FORM{$_[0]}§$_[1]";
    print "\$FORM{\$_[0]}=$FORM{$_[0]}\n
    ";
    }
    else {
    $FORM{$_[0]}=$_[1];
    }
    }
    #########
    sub get_var {
    local($return)="";
    $return="$FORM{$_[0]}" if ($FORM{$_[0]});
    $return=~ s/$_[1]//g;
    return $return;
    }
    #########
    sub readtxtfile {
    open(READTXTFILE,"$_[0]");
    @readtxtfile=<READTXTFILE>;
    close(READTXTFILE);
    return @readtxtfile;
    }
    #############
    sub checkempty {
    local($chkval)=$_[0];
    $chkval =~ s/ |
    |\n//g;
    &error($_[1]) if ($chkval eq "");
    }
    ##########
    sub outhtml {
    print "<html><head>\n";
    print "</head><body >\n";
    print "$_[0]\n";
    print "</body></html>\n";
    exit 0;
    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>