?? 87.txt
字號:
在軟件啟動時設置AdoConnection控件的connectionstring :procedure TMainForm.FormCreate(Sender: TObject);
var
S:String;
begin
with ADOConnection do
Begin
Connected:=false;
S:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source="'+ExtractFilePath(Application.ExeName);//這是路徑
S:=S+'Student.mdb";Mode=Share Deny None;Extended Properties="";';
S:=S+'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;';
S:=S+'Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;';
S:=S+'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
ConnectionString:=S;
Connected:=true;
End;
ADODataSet.Active:=true;
end;
*******************************************************************************************
我算是犀利糊涂完成了,謝謝各位幫助,我把最后的原代碼寫在這里,也許用的著:
function setdblocation(數據庫名,計算機名):boolean
begin
vConn:AdoInt._Connection;
szConnect:='Provider=SQLOLEDB.1;Persist Security Info=False;';
szConnect:=szConnect+'Password='''';User ID=sa;database=數據庫名;';
szConnect:=szConnect+'Data Source='''+計算機名+'''';
vConn:=CreateComobject(CLASS_Connection)as ADOInt._Connection;
try
vConn.Open(szConnect,'sa','',adOptionUnspecified);
except
失敗 返回;
exit;
end;
成功返回;
end;
**************************************************************************************************
Delphi中怎樣將字符串按給定字符分隔(類似split函數的功能)
該文章轉載自網絡大本營:http://xrss.cn/Dev/Delphi/200751613291.Html
今天偶爾要做的Delphi程序,其中涉及到了字符串處理,里面有一個功能類似于VB里的split()函數的功能,于是查了很久才查到些資料,現將這些資料整理一下,方便大家.
首先是一個網友自己編的函數.實現了和split()函數的功能.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type userarray=array of string;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function split(s: string; dot: char): userarray;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses StrUtils;
{$R *.dfm}
//按所給字符將字符串分隔成數組
function TForm1.split(s:string;dot:char):userarray;
var
str:userarray;
i,j:integer;
begin
i:=1;
j:=0;
SetLength(str, 255);
while Pos(dot, s) > 0 do //Pos返回子串在父串中第一次出現的位置.
begin
str[j]:=copy(s,i,pos(dot,s)-i);
i:=pos(dot,s)+1;
s[i-1] := chr(ord(dot)+1);
j:=j+1;
end;
str[j]:=copy(s,i,strlen(pchar(s))-i+1);
result:=str;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ur:userarray;
i:Integer;
begin
ur:=split(Edit1.Text,';');
for i :=0 to 255 do
begin
if length(ur[i])=0 then Exit;
ShowMessage(ur[i]);
end;
end;
end.
說明,測試這個代碼時請在窗體上放一個文本編輯框和一個按鈕,字符串是以';'號分割的;
第二種方法比較簡單:
TStringList的用法
TStrings是一個抽象類,在實際開發中,是除了基本類型外,應用得最多的。
常規的用法大家都知道,現在來討論它的一些高級的用法。
先把要討論的幾個屬性列出來:
1、CommaText
2、Delimiter & DelimitedText
3、Names & Values & ValueFromIndex
先看第一個:CommaText。怎么用呢?用代碼說話:
const
constr :String = 'aaa,bbb,ccc,ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
執行了這段代碼后,可以看到ShowMessage顯示出來的分別是:aaa bbb ccc ddd。
也就是說,strs.CommaText := constr這一句的作用,就是把一個字符串以','為分割符,分段添加到TStrings中。
那么如果不是以','來分割,又該怎么做呢?現在看第二個例子。使用Delimiter和DelimitedText。
const
constr :String = 'aaa\bbb\ccc\ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
可以看到, 顯示的效果和第一個例子是一模一樣的。解釋一下:
Delimiter為分隔符,默認為:','。DelimitedText就是按Delimiter為分隔符的一個串,得到賦值后回把這個字符串按Delimiter的字符添加到TStrings中。
說到這里,有想起一個屬性,QuoteChar。其默認值為:'"'(不包括單引號)
有何用呢?看例子:
const
constr :String = '"aaa"\"bbb"\"ccc"\"ddd"';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
顯示出來的仍然是aaa bbb ccc ddd。為什么不是:"aaa" "bbb" "ccc" "ddd"呢?
再來看一個例子:
const
constr :String = '|aaa|\|bbb|\|ccc|\|ddd|';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.QuoteChar := '|';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
顯示出來的又是aaa bbb ccc ddd。對比一下,應該不難明白吧?這個就不多說了,用得也不多。
但是還要多說一句,當Delimiter為:','而QuoteChar為:'"'時,DelimitedText和CommaText是同等的。
最后要說的三個是:Names & Values & ValueFromIndex。
看看下面的代碼:
const
constr :String = '0=aaa,1=bbb,2=ccc,3=ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to strs.Count-1 do
begin
ShowMessage(strs.Names[i]);
ShowMessage(strs.Values[strs.Names[i]]);
ShowMessage(strs.ValueFromIndex[i]);
end;
end;
通過這個例子不難看出:
這個時候strs中的內容是:
0=aaa
1=bbb
2=ccc
3=ddd
而Names中則是:
0
1
2
3
在Values中則是:
aaa
bbb
ccc
ddd
我看了這個資料后按照上面的例子用了,但是發現","號做為分隔符時好用,自己用strs.Delimiter =';'更改不了分隔符,不知為什么,不過能直接用','號分隔已經完成了我想要的功能了,希望哪為高手能指點一下
該文章轉載自網絡大本營:http://xrss.cn/Dev/Delphi/200751613291.Html
*****************************************************************************************
delphi中字符使用技巧---在制作dll時臨陣磨槍
Delphi中的字符串
來自Jenry的blog http://dev.csdn.net/user/Jenry
一:各種字符串
字符串是Object Pascal所有數據類型中最有用的類型。許多函數以字符串為傳遞參數。由于在Delphi中字符串的定義和使用有各種方式,包括Pascal中典型的字符串(String),Delphi支持的長字符串(ANSIString),類似于C語言的字符數組(Array of Char),指向字符的指針(Pchar)等。下面的文章就跟談談這些類型在定義和應用中的區別和注意事項。
1. 傳統的Pascal字符串
在Pascal中,典型的字符串是一定長度的字符序列。每一字符串有一設定的長度(缺省值為255),下面是一個例子:
Var
Address:String;
Code:String[50];
Address是一長度為255的字符串,Code的最大長度為50。
傳統的Pascal字符串長度不能超過255。
可以用字符串連接操作"+"把字符串連接在一起:
Result:=String1+String2;
2. Delphi中的長字符串
Delphi除了支持傳統的Pascal短字符串還支持長字符串。長字符稱為ANSIString。長字符串動態分配內存,即用字符串時才分配字符串所需內存,所以其長度不受限制。在Delphi中你如果用String1:String作類型說明,則String1既可能是短字符串也可能是長字符串,這取決于編譯器中$H開關的設置。默認值為$H+,代表ANSI長字符串,VCL中的組件使用ANSI長字符串。長字符串以null結束,這就說明長字符串與C語言中的以null結束的字符串完全兼容。
可以通過SetLength函數設置字符串的最大長度:
SetLength(String1,100);用TrimLeft,TrimRight和Trim函數分別來消除字符串開頭,結尾和首尾的空白區。
3. 類似于C的字符數組
可以用以0為起點的數組來存儲以null結束的字符串。如下定義:
Var
Name:Array[0..50] of Char;
4. Pchar指針
如果Delphi中的Exended Syntax 已經設置(缺省值),以0為起點的字符數組就和指向字符的指針Pchar完全兼容,因為以0為起點的字符數組名即指向該字符數組首字符的指針。可以將字符串直接付值給Pchar指針。例如:
var
P: PChar;
begin
P := 'Hello world';
end;
這樣P就指向存儲字符串'Hello world'并以null結束的一塊內存。
許多Windows的應用程序接口API函數要求用Pchar類型作參數。Pchar指針在使用是首先用GetMem(var P: Pointer; Size: Integer)函數申請分配內存,程序結束時用FreeMem(var P: Pointer[; Size: Integer])函數釋放內存。例如:
Var WinDir,SysDir:Pchar;
Begin
GetMem(WinDir,256);{為指針分配內存}
GetWindowsDirectory(WinDir,128);{將Windows安裝目錄放至WinDir}
ShowMessage('Windows directory is'+WinDir);{顯示結果}
End;
二:字符串轉換
以上介紹了Delphi中的四類字符串的定義和使用。由于各類函數對字符串參數類型要求不一,這就需要進行字符串類型轉換。
1. 可以用StrPas將以null結束的字符串轉換為Pascal短字符串。StrpCopy則完成相反的轉換。
2. 因為長字符串以null結束,所以可以用強制類型轉換將長字符串轉換成Pchar類型。用法是:Pchar(s),s是一個長字符串。強制類型轉換返回一個指向長字符串首字符的指針,并且所指字符串以null 結束。例如:
Var
Caption,Message:string;
Caption:='Hello World!';
Mssage:='This is a test of long string';
MessageBox(0,Pchar(Message),Pchar(Caption),MB_OK);
小結:在使用Delphi中的字符串時,要時刻清楚該字符串的類型,以免引起混淆。在理解字符串時要把字符串與指針,內存分配聯系起來,加強理解。
*******************************************************************************************************
[求助]adoconnection string 編寫
沒準執行程序放在哪一個目錄。
所以
adoconnection.connectionstring里面的目錄不能設成固定的。怎么編寫str使得無論程序在那個目錄都可以連接到數據庫。
數據庫放在程序文件夾的根目錄下。
1
樓主用的是access 數據庫吧
有一個函數可以獲取執行程序所在路徑 extractfilepath(application.ExeName)
可以把數據庫放在 和執行程序同一個路徑下 動態連接
思路就是這樣子了,怎么寫程序,自己考慮吧
最近加班要瘋了
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -