晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/share/doc/unixODBC/doc/ProgrammerManual/Tutorial/ |
Upload File : |
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>executing a query</TITLE>
<link rel="stylesheet" Href="odbc.css">
</HEAD>
<BODY bgcolor="white">
<table width="90%" cols="3" border="0">
<TR>
<TD colspan="3" class="big">Executing a query</TD>
</TR>
<TR>
<TD colspan="3"><P>If you want to execute a query you will need to specify
a handle (<CODE>SQL_HANDLE_STMT</CODE>) for a SQL-statement. In order to get one
you have to allocate one with <CODE><A HREF="gloss.html#alloc">SQLAllocHandle</A></CODE>.
</P>
Then you have to think about the SQL statement you want to execute. As I mentioned in the introduction
I assume that we have a table <CODE><A HREF="intro.html#tab">tkeyuser</A></CODE> which contains the following
data:</P>
<TABLE COLS=3 cellspacing="1" border="0" bgcolor="#eeeeee" cellpadding=2 width="50%">
<TR>
<TH class="head">iduser</TH>
<TH class="head">dtname</TH>
<TH class="head">dtmaxSize</TH>
</TR>
<TR>
<TD>1</TD>
<TD>Christa</TD>
<TD>10000</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Nicole</TD>
<TD>9000</TD>
</TR>
</TABLE>
<P>
In this example, we want to execute a query which returns all the rows for the
fields <CODE>iduser</CODE> and <CODE>dtname</CODE> in this table ordered
by <code>iduser</CODE>. So the SQL statement would be:</P>
<CODE>
SELECT iduser,dtname FROM tkeydata ORDER BY iduser
</CODE>
<P>
If you execute this statement you would get two rows each with two <A HREF="gloss.html#col">columns</A> of data.
This data has to be stored somewhere so that your programm can actually use it, so you need to define a variable
for each of the columns. So you need to bind a column to variable in your program. Binding a variable automatically
stores the data of the column in the variable when you retrieve a result <A HREF="gloss.html#row">row</A> from the
connection. It is important that your variables match the <A HREF="gloss.html#dtyp">type</A> of the column in the table
within the database.</P>
<P>
So we need to bin column #1 to a variable of type <CODE>SQLINTEGER</CODE> and the second column to
a variable of type <CODE>char</CODE>. This is done by <CODE><A HREF="gloss.html#bind">SQLBindCol</A></CODE>.
Therefore we add the variables:</P>
<CODE class="list">
SQLHSTMT V_OD_hstmt; <FONT COLOR="blue">// Handle for a statement</FONT><BR>
SQLINTEGER V_OD_err,V_OD_id;<BR>
char V_OD_buffer[200];
</CODE>
<P>
Now we can bind the variables:</P>
<CODE class="list"><PRE>
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,200,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,sizeof(V_OD_id),&V_OD_err);
</PRE>
</CODE>
<P>
Yes you should check for the return code of the function call. I'm to lazy to
code it here once again :(
</P>
Now we can execute the query by calling <A HREF="gloss.html#exec"><CODE>SQLExecDirect</CODE></A>:
</P>
<CODE class="list"><PRE>
V_OD_erg=SQLExecDirect(V_OD_hstmt,
"SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error Select %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,
V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
</PRE>
</CODE>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>