📄 dbiregistercallback.html
字号:
<HTML>
<HEAD>
<TITLE>BDE API Examples (DbiRegisterCallback)</TITLE>
<META NAME="KEYWORDS" CONTENT="BDE, Borland">
<META NAME="DESCRIPTION" CONTENT="">
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#000000" ALINK="#999999" VLINK="#666666">
<CENTER>
<TABLE CELLPADDING="4" CELLSPACING="4" BORDER="0" WIDTH="600">
<TR>
<TD ALIGN="CENTER" VALIGN="TOP" COLSPAN="1"><NOBR><A HREF="/"><IMG SRC="/images/bolus.gif" ALT="[View Borland Home Page]" BORDER="0"></A><A HREF="/products.html"><IMG SRC="/images/products.gif" ALT="[View Product List]" BORDER="0"></A><A HREF="/searchsite/"><IMG SRC="/images/search.gif" ALT="[Search This Web Site]" BORDER="0"></A><A HREF="/download.html"><IMG SRC="/images/downloads.gif" ALT="[View Available Downloads]" BORDER="0"></A><A HREF="/membership.html"><IMG SRC="/images/membership.gif" ALT="[Join Borland Online]" BORDER="0"></A><A HREF="/newsgroups/"><IMG SRC="/images/newsgroups.gif" ALT="[Enter Discussion Area]" BORDER="0"></A><A HREF="/feedback/"><IMG SRC="/images/feedback.gif" ALT="[Send Email To Webmaster]" BORDER="0"></A></NOBR></TD>
</TR>
<TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" COLSPAN="1"><font size=2>
<h2>BDE API Examples (DbiRegisterCallback)</h2>
Registers a callback function for the client application.
<hr size=2 noshade>
<H3>Example 1: Create a callback that handles the condition of a missing
.MDX file for a dBASE file or a missing .CDX file for a FoxPro file:</H3>
<PRE>//Function called by DbiRegisterCallBack
function myfunc(ecbType : CBType; iClientData : LongInt;
pCbInfo : pCBInputDesc): CBRType; stdcall;
const
READONLY = 'Read Only';
FAILOPEN = 'Fail Open'; //The default
OPENANDDETACH = 'Open and Detach';
var
counter : integer;
begin
case ecbtype of
cbINPUTREQ: //It's a callback of cbINPUTREQ type
if pcbInfo.eCbInputId = cbiMDXMIssing then
begin
{
//Simple loop to list all modes, could be used to give used
//to give a choice
for counter:= 0 to pcbInfo.iCount-1 do
showmessage(pcbInfo.acbEntry[counter].szKeyWord + #13 +
pcbInfo.acbEntry[counter].szHelp);
}
for counter:=0 to pcbInfo.iCount-1 do
if pcbInfo.acbEntry[counter].szKeyword = OPENANDDETACH then
begin
pcbInfo.iSelection:=counter+1;
pcbInfo.bSave := FALSE;
break;
end;
end
else //if
ShowMessage('Unexpected eCbInputId');
else //Case
ShowMessage('Unexpected ecbType')
end;
end;
//Register the callback and open the table
procedure TForm1.Button2Click(Sender: TObject);
var
cbinfo : CBInputDesc;
begin
session.open;
Check(DbiRegisterCallBack(
nil, //Cursor (Optional)
cbINPUTREQ, //Type of Callback
longint(0), //Pass-through client data
sizeof(CBInputDesc), //Callback buffer len
@cbinfo, //Pointer to callback function
@myfunc //Call back fn being registered
));
Table1.Open;
//Unregister the callback
Check(DbiRegisterCallBack(nil, cbINPUTREQ, 0, sizeof(CBInputDesc), nil , nil));
end;</PRE>
<hr size=2 noshade>
<H3>Example 2: Register the cbTABLECHAGNED callback for notification when a Paradox
table's data has changed</H3>
This example is too complicated to be shown here. A sample
<A HREF="/devsupport/bde/files/tablechanged.zip">Delphi registration component with an example</A>
is available that will do all the registration work for you. Simply install the new TTable
component (TRegisterTable in RegisterTable.pas) and compile the included project. This component
will work with all table types, but will only use the callback with Paradox table types.
<hr size=2 noshade>
<p>
<A HREF="/devsupport/bde/bdeapiex/index.html">Back to BDE API Reference Page</A>
</TD></TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" COLSPAN="1"><font size=2>
<HR SIZE="2" NOSHADE>
<FONT SIZE = 2><i><b>DISCLAIMER:</b> You have the right to use this technical information subject to
the terms of the No-Nonsense License Statement that you received with the Borland product to which
this information pertains.</FONT></i></B>
</dl>
</td>
</TR>
<TR>
<!-- THIS IS THE BOTTOM COPYRIGHT & UPDATED MESSAGE -->
<TD ALIGN="CENTER" VALIGN="TOP" COLSPAN="3"><FONT SIZE="2"><A HREF="/copyright.html">Trademarks & Copyright</A> © 1998 Borland International, Inc.
<SCRIPT LANGUAGE="JavaScript">
<!-- HIDE FROM OLD BROWSERS
// THIS WILL WRITE OUT THE LAST MODIFIED DATE
// YOU DO NOT NEED TO CHANGE ANYTHING HERE
function makeArray(arraySize) {
this.length = arraySize
return this
}
monthNames = new makeArray(12)
monthNames[1] = "January"
monthNames[2] = "February"
monthNames[3] = "March"
monthNames[4] = "April"
monthNames[5] = "May"
monthNames[6] = "June"
monthNames[7] = "July"
monthNames[8] = "August"
monthNames[9] = "September"
monthNames[10] = "October"
monthNames[11] = "November"
monthNames[12] = "December"
updated = new Date(document.lastModified)
theMonth = monthNames[updated.getMonth() + 1]
theDate = updated.getDate()
theYear = updated.getYear() + 1900
document.write("Last modified on " + theDate + "-" + theMonth + "-" + theYear + ".")
// END HIDING -->
</SCRIPT></FONT></TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -