㈠ delphi sql查詢並顯示
DBGrid組件是用來顯示數據表的。
Delphi資料庫處理
第一節 BDE、ADO、InterBase和dbExpress
Delphi中處理資料庫主要有兩種方法,也就是BDE、ADO,從Delphi
6.0開始還加入了一種dbExpress方法。 另外,Delphi還提供了專門處
理Borland 公司自己的資料庫產品InterBase 資料庫的專門的方法。
BDE(Borland Databas Engine), 是Delphi中最古老的技術,從
delphi 2.0加入BDE 技術以後,一直是Delphi處理資料庫的事實上的標
准。BDE 是一個基於驅動程序的體系結構,每一種數據格式或數據源都
有一種驅動程序來驅動相近的數據源。BDE 可以很好的支持現在最流行
的ODBC API方法,
ODBC是一種C/C++ 應用程序編程介面(API ),無論是對任何一種
客戶/ 伺服器關系型資料庫管理系統(RDBMS ),還是最流行索引順序
訪問方法(ISAM)資料庫(Jet、Foxpro), 都能很好的訪問。
同時,由於BDE 的驅動程序主要直接來自於第三方開發商,所以,
對於像Oracle這些非微軟的資料庫,執行效率上比較高。正是這些特點,
使BDE 技術還是得到了很多資料庫開發程序員的歡迎。
ADO 技術是微軟提出來的處理關系型資料庫和非關系型資料庫的新
技術,它基於微軟被稱為OLE DB的數據訪問模式,它是專門為了給大范
圍商業數據源提供訪問而設計的,包括傳統的關系型數據表、電子郵件
系統、圖形格式、Internet資源等。ADO 所需內存更少,更適合大流量
和大事務量的網路計算機系統。
ADO 頂層有三個對象:Connection、Command、Recordset。
Connection用以指定數據源,建立和數據源的連接。
Command 對象用以對數劇源執行指定的命令,可以接受SQL 語句,
表和存儲過程的名稱,執行SQL 查詢,更新數據,插入紀錄等。
Recordset 對象表示的是來自表或命令執行結果的記錄全集,操縱
來自提供者的幾乎所有數據。
由於ADO 技術的迅速普及,從Delphi 5.0 開始,加入了ADO 技術
的模塊,並逐步成為Delphi資料庫設計的主流。但是,和VB的ADODC 相
比,它還是有所不同的,在數據綁定上,它更多的吸收了BDE 的特點,
以做到和原來的程序兼容,同時,它又可以接受標准ADO 技術的各種屬
性和方法,在接受這些屬性和方法時,它是和數據綁定控制項脫離的,當
然從某種意義上來說,這種方案提高了執行效率,給設計人員以更多的
選擇。
dbExpress 是Delphi 6.0加入的最新的資料庫模塊,它不使用緩存,
可以快速瀏覽大量的數據,但是,不使用緩存就不能更改,所以它的標
准方式是只讀的。它一個重要的特點是交叉平台,可以和Linux 資料庫
連接,速度相當快。
下面的討論,將以ADO 技術為主線,最後再說明BDE 和dbExpress
的應用方式。
第二節 ADO 面板的主要組件
ADO 面板一共有7 個組件:
ADOConnection: 主要用於建立資料庫的連接;
ADOdataSet:ADO 提取和操作資料庫的主要數據集,可以直接連接
到資料庫,也可以通過 ADOConnection連接到資料庫。
ADOtable:主要用以操作和提取單個基表的數據,可以直接連接到
資料庫,也可以通過 ADOConnection連接到資料庫。
ADOquery:通過SQL 語言提取數據,其連接資料庫的方式和前兩種
一樣。
ADOStoredProc: 這個組件專門用於運行資料庫中的存儲過程。
ADOCommand:該組件用於運行一些SQL 命令,這個組件可以和支持
數據集的組件一起使用,也可以直接從一個基表中提取一個數據集。
RDSConnection: 一個進程或一台計算機傳遞到另一個進程或計算
機的數據集合。
為了連接數據綁定控制項,上述組件往往要和處於Data Access 中的
Datasource配合使用。
可以看出,和VB的ADODC 不同的,Delphi中解決同一個問題提供了
多種方案,看起來似乎增加了麻煩,但是卻可以給程序員更大的自由空
間,便於設計出高效率的資料庫程序來。
下面通過幾個例子來說明ADO 控制項的用法。
第三節 ADOtable組件
ADOtable、ADOdataSet、ADOquery和ADOStoredProc都繼承了同一
個父類TCustomADODataSet,所以,在屬性事件和方法上有很多相似的
地方,但它主要是針對資料庫中的表進行操作。
ADO -〉ADOtable
屬性:
Name='控制項名'
ConnectionString='連接字元串'
可以通過點擊右邊的按鈕,通過向導建立數據源。有時候需要
知道相對路徑,可以用下面的方法找到程序當前的路徑:
tpath:=ExtractFilepath(Application.Exename);
文件名:=Tpath+'..\data\Test.mdb'
表明資料庫在當前程序上一層的Data文件夾下。
TableName='表名'
Active=true
這就激活了數據源,為了和綁定控制項聯系,要增加一個DadaSource
控制項。事實上,所有的綁定控制項都是和DadaSource聯系。
Data Access-〉DadaSource
屬性:
Dataset=ADOtable.Name
加入綁定控制項:
Data Controls-〉
DBgrid(表格)
屬性
DadaSource='DadaSource.Name'
DBNavigator(導航條)
屬性
DadaSource='DadaSource.Name'
運行一下可以看出關系
下面介紹一下ADOtable的一些重要的方法,這些方法大部分和Table
是兼容的。
為了便於敘述,ADOtable控制項的Name定為 ADOtable1
1)移動指針
第一個: ADotable1.First;
最後一個: ADotable1.Last;
下一個: ADotable1.Next;
前一個: ADotable1.Prior;
2)從欄位中取出數據
通過如下方法可以訪問欄位的值
ADOtable1.FieldValues['欄位名']
ADOtable1.Field[索引值]
在讀寫欄位的時候,又是根據需要可以加上強制類型轉換
例如:
Edit1.text:=ADOtable1.Field[0].AsString;
用下面的方法可以去除欄位的性質:
ADOtable1.fielddefs[索引值].name; 欄位名
ADOtable1.fielddefs[索引值].Size; 欄位大小
ADOtable1.fielddefs[索引值].Datatype; 欄位屬性
3)修改數據:
修改數據的時候,需要先建立EDIT方法,然後用Post方法才能真
正的寫入。
ADOtable1.edit;
ADOtable1.FieldValues['姓名']:='王秀琴';
ADOtable1.post;
4)增加一條空紀錄: ADOtable1.append;
新增紀錄也可以用如下方法,在新增紀錄的同時輸入數據
ADOtable1.appendRecord(xxx,xxx,xxx,....);
5)刪除當前紀錄:ADOtable1.delete;
如果在ADOtable1的OnBeforeDelete方法中寫下:
if messagedlg('確實要刪除嗎?',mtinformation,[mbyes,mbno],
0)=mrno then abort();
可以實現刪除前的提示。
6)過濾
可以用如下的方法實現數據的過濾
在ADOtable1的OnFilterRecord方法中寫下:
Accept:=(條件);
然後
ADOtable1.filtered:=true; 為實現過濾。
ADOtable1.filtered:=false; 為解除過濾。
7)指針在文件的頭尾
指針在最後一條記錄之後 ADOtable1.Eof
指針在第一條記錄之前 ADOtable1.Bof
如此可以實現對資料庫的遍歷
form1.ADOtable1.first;
while not form1.ADOtable1.eof do
Begin
.......
form1.ADOtable1.next;
End;
8)此外, ADOtable組件還繼承了ADO 中的RecordSet對象幾乎
全部屬性和方法,簡述如下:
with adoTable1.Recordset do
begin
//屬性
PageSize 一頁所包含的記錄數
PageCount 數據的頁數
AbsolutePage; 當前記錄所在頁
AbsolutePosition; 當前記錄的序號位置
BOF; 指針在第一個記錄之前
EOF; 指針在最後一個記錄之後
//方法
AddNew fieldList,Values; 創建新記錄,其中fieldList為用數
組表示的欄位名集,Values為用數組表
示的數據集。
Cancel; 取消上一步所作的修改
Update Fields,Values; 保存對當前記錄所作的修改
Delete; 刪除當前記錄
Move(n); 移動n 條記錄
MoveFirst; 移動到第一條紀錄
MoveLast; 移動到最後一條紀錄
MoveNext 移動到下一條紀錄
MovePrevious 移動到上一條紀錄
Requery; 通過從新執行對象所基於的查詢,以
更新RecordSet 對象中的數據。
end;
使用Recordset 對象來處理數據集的數據,會發現數據幫定控制項的指
針一般不會跟著移動,這實際上給設計者提供了另一個在後台快速處理數
據的方法。
附錄:關於TActionList控制項的使用
在Standard面板,提供了一個TActionList 控制項,它集中了大部分按
鈕的使用方法,可以簡化按鈕的設計。
方法:
調入TActionList,雙擊,可以看到一個面板,右鍵 -〉New Standard
Action 選擇 Datasat下的適當的控制,可以選擇多個。
以後加入的開關,只要在屬性Action 中選擇適當的項目就可以了,不
需要專門編程,實例見「ActionList應用」。
第四節 ADOQuery組件
和ADOtable組件一樣,ADOquery繼承了同一個父類TCustomADODataSet,
所以,上面說到的ADOtable屬性事件和方法基本上是通用的,但它主要是
針對資料庫中的SQL 命令進行操作。
下面主要說一下ADOquery特殊的地方。
1)SQL 屬性
SQL 是TStrings類型的屬性,包含了ADOquery組件要執行的SQL 命令,
是ADOquery最為重要的屬性之一。
在應用程序中,需要調用Open方法或者ExecSQL 方法來執行在SQL 中
的命令。在設計階段,可以利用屬性編輯起來編寫。
例如:
Width ADOquery do
Begin
//重新寫入時,要關閉原來的查詢
Close;
width SQL do
Begin
//因為Add是在原來的基礎上加入,所以先清除原來的SQL命令
Clear;
Add('selsct 編號,姓名,獎金')
Add('From 獎金錶')
End;
//執行SQL 命令
Open;
End;
查詢命令也可以這樣來寫:
s1:='編號';
s2:='姓名';
s3:='金額';
with ADOquery1 do
begin
sql.Clear;
SQL.Add('select ');
SQL.Add(s1+','+s2+','+s3);
SQL.Add(' From 獎金 ');
execsql;
active:=true;
end;
效果是一樣的。
第五節 ADOConnection 和 ADODataSet
雖然ADOTable和ADOQuery組件可以非常簡單的連接資料庫,但是當需
要更加精細的控制資料庫的時候,往往需要應用ADO 更多的方法,我們知
道,支撐ADO 的主要由Connection,Command,Recordsrt三個對象組成,
對應的就有ADOConnection和ADOCommand控制項,而Recordsrt對象屬性和方
法,封裝在ADODataSet中,同時ADODataSet本身,也具備和ADOtable組件
相同的對數據綁定控制項控值的屬性和方法。
這就大大提高了對資料庫的控制能力。
在ADO 頂層有三個對象中Connection處在最頂層,用以指定數據源,
建立和數據源的連接。所以,ADOConnection必須和其它的數據控制項連接
才有效,最常用的就是和ADODataSet配合。
下面首先介紹連接方法,然後再討論其它的問題
1)ADOConnection的加入和連接
加入ADOConnection
屬性:ConnectionString='連接字元串'
加入ADODataSat
屬性:Connection='ADOConnection1' ..... (ADOConnection,Name)
CommandType=cmdtable ...使用表連接
CommandText 根據上面的選擇,或選擇表,或出現SQL 編輯框。
Active=True 激活。
加入DataSource
屬性:Dataset=ADODataSat 完成連接,再連接數據綁定控制項。
2)ADOConnection的重要屬性和方法
屬性:
a).Attributes
設置連接的資料庫自動處理事務的能力
xCommitRetaining:提交一個事務後自動開始一個新事務
xAbortRetaining :回退一個事務的同時開始一個新事務
b).Connected
標識和資料庫的連接受否處於激活(True)
方法:
c).Open(UserID,PassWord)
打開一個連接(可以提供用戶名和密碼)
d).Cancel
關閉資料庫的連接
e).Close
釋放所有的系統關聯資源
f).Execute 執行一個SQL 命令。
完整的表述是
Execute(SQL命令,該命令設計的記錄數目,Option)
其中,Option的值如下
eoAsyncExecute 非同步執行指定的命令
eoAsyncFetch 給定Cache屬性的值後,再非同步的取得數據
eoAsyncFetchNonBlocking 非阻塞式線程執行
eoExecuteNoRecords 沒有返回紀錄
g).GetProcereNames(List:Tstring);
獲取資料庫伺服器上的存儲過程名稱,過程名保留在List參
數中。
f).GetTableNames(List:Tstring;SystemTables:Boolean=False)
獲取資料庫的數據表,表名存放在List參數中,SystemTables
指示是否獲取資料庫系統表的名稱,系統表是關於資料庫類型定義
和用戶信息的數據表,是資料庫本身自動產生的。在特殊的設計中,
這個表格可能會有用。
3)ADODataSet的屬性和方法
我們在ADOTable中討論的屬性和方法,幾乎都可以在ADODataSet中得
到應用,但還有幾個特殊的屬性:
CommandType
主要用於控制CommandText屬性的狀態,其中:
cmdtable ...CommandText使用「表名」連接
(內部是做了SQL 對各列的查詢);
cmdTableDirect ...CommandText使用「表名」連接
(內部不做SQL ,而是真正的表名連接);
cmdtext ....使用SQL命令文本;
cmdfile ....CommandType屬性值作為持久的文件名;
cmdStoredProc...CommandType屬性值作為存儲過程名稱
來計算;
cmdUnKnown ....不知道(默認為SQL)
CommandText
根據CommandType的設置,向提供者發出「表名」或SQL 命令。
㈡ 如何在電腦上找到SQL資料庫的路徑
在電腦上面找到資料庫的路徑,你可以打開你的資料庫管理系統,然後看看裡面的項目所存儲的位置,就可以在電腦上面找到對應的路徑,希望能夠幫到您
㈢ SQL怎麼顯示系統中所有的索引
select a.name as tabname
,h.name as idname
from sys.objects as a
right join sys.indexes as h on a.object_id=h.object_id
where a.type<>'s'
go
由於索引和系統列沒有直接對應關系 所以不能直接查看列欄位和欄位長度
㈣ SQL里的 show search_path可以顯示當前搜索路徑。請問show search_path在哪裡輸入
新建查詢
㈤ sql 根據文件名稱查找文件在電腦中的路徑
以下SQL語句代碼可用來檢查文件夾或文件是否存在
declare @foldername nvarchar(255)
declare @r int
declare @s nvarchar(255)
set @s = 'dir ' + @foldername
exec @r=xp_cmdshell @s,no_output
if @r = 0
print @foldername+ '存在'
else
print @foldername+ '不存在'
再把上述代碼修改一下,即可實現你的要求。
㈥ 如何在電腦上找到SQL資料庫的路徑
1、首先電腦打開SQL客戶端,找到實例,右鍵實例出現菜單欄,點擊屬性進入即可。
㈦ SQL資料庫怎麼用查詢來設置文件路徑
最近遇到一個伺服器的資料庫文件增長很快,情況屬於正常,磁碟空間很快就要滿了,但是另一個分區還有大把的空間,所以尋思著怎麼把資料庫文件,放過去,代碼如下:
DECLARE @DBNAME VARCHAR(255)
DECLARE @TargetPath VARCHAR(255)
DECLARE @CmdCommand VARCHAR(2000)
SET @DBNAME='TEST'
SET @TargetPath='D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA'
--第一步:設置資料庫離線
SET @CmdCommand= 'ALTER DATABASE '+@DBNAME+' SET OFFLINE'
EXEC(@CmdCommand)
--第二步:物理拷貝資料庫文件到新目錄
DECLARE @FileName VARCHAR(255)
DECLARE @SourceFullName VARCHAR(255)
DECLARE FileCur CURSOR for SELECT name,physical_name from sys.master_files where database_id=db_id(@DBNAME)
OPEN FileCur
FETCH NEXT FROM FileCur INTO @FileName,@SourceFullName
WHILE @@FETCH_STATUS=0
BEGIN
SET @CmdCommand= ' "'+@SourceFullName+'" "'+@TargetPath+'"'
EXEC master..xp_cmdshell @CmdCommand
--修改資料庫文件的路徑指向新目錄
SET @CmdCommand='ALTER DATABASE '+@DBNAME+' MODIFY FILE(FILENAME='''+@TargetPath+CASE WHEN RIGHT(@TargetPath,1)='\'THEN'' ELSE'\' END+
RIGHT(@SourceFullName, CHARINDEX('\', REVERSE(@SourceFullName))-1)+''',name='''+@FileName+''')'
EXEC(@CmdCommand)
FETCH NEXT FROM FileCur INTO @FileName,@SourceFullName
END
CLOSE FileCur
DEALLOCATE FileCur
--第三步:設置資料庫聯機
SET @CmdCommand= 'ALTER DATABASE '+@DBNAME+' SET ONLINE'
EXEC(@CmdCommand)
也可以把這個做成一個過程,就不在這里修改了。
㈧ 如何在sql server中查找一個文件的保存目錄,文件是軟體自動生成的。
1、先打開SQL Server資料庫並連接。
2、然後找到目標資料庫,右鍵並點擊「屬性」