對數據庫表及字段的查詢添加
if OpenDialog1.Execute then
begin
Edit1.Text := OpenDialog1.FileName;
ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ Edit1.Text + ';Persist Security Info=False';
ADOConnection1.Open;
ADOConnection1.GetTableNames(ComboBox1.Items);
ComboBox1.ItemIndex := 0;
end;
若是你是用ADO的話
ADOConnection1.GetTableNames();得到表的列表
ADOConnection1.GetFieldNames();得到某個表的字段列表
TADOConnection 鏈接後,
ADOConnection1.DataSetCount 爲表的個數
ADOConnection1.DataSets[i].Name表名
如:
ADOConnection1.GetTableNames(ComboBox1.Items, False);
//該函數會把表名列在ComboBox1.Items中.
有表名獲取字段名,把字段名列在中
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.Text<>'' then
begin
ADOConnection1.GetFieldNames(ComboBox1.Text,listbox.Items);
end;
end;
可是在測試發現字段名默認都自動排序了,如要取消能夠 fieldlist.Sorted := False;
「動態添加一個數據庫字段」是數據庫SQL自己的事,與Delphi關係不大。
ADOCommand1.CommandText := 'alter table 表名 add 字段名1 varchar(12),字段名2 integer,字段3 datetime';
ADOCommand1.Execute;
adoquery1.sql.add('alter table 表名 add 字段名1 varchar(12),字段名2 integer,字段3 datetime');
經過ADO.QUERY鏈接數據庫···而後用SQL語句查詢就能夠了
獲取當前數據庫中的全部用戶表個數
select count(*) from sysobjects where xtype='U' and category=0
獲取當前數據庫中的全部用戶表表名
select name from sysobjects where xtype='U' and category=0
sysobjects 系統對象表
XTYPExtype char(2) 對象類型。
能夠是下列對象類型中的一種:
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日誌
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 複製篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程
category int 用於發佈、約束和標識。
//在列表框中添加數據集中的全部字段
procedure TForm1.FillFields; var i:Integer; begin //清空列表框 ListBoxField.Items.Clear; for i:=0 to ADOQuery1.FieldCount-1 do begin ListBoxField.Items.Add(ADOQuery1.Fields[i].DisplayName); end; ListBoxField2.Items:=ListBoxField.Items; //確保ListBox中選項被選中 ListBoxField.Selected[0]:=true; ListBoxField2.Selected[0]:=true; end;//獲取查詢條件
function TForm1.GetSearchOpition: TLocateOptions;
var
SearchOpition:TLocateOptions;
begin
if CheckBox1.Checked then
SearchOpition:=SearchOpition+[loPartialKey];
if CheckBox2.Checked then
SearchOpition:=SearchOpition+[loCaseInsensitive];
Result:=SearchOpition;
end;
procedure TForm1.ButtonSearchClick(Sender: TObject);
begin with ADOQuery1 do begin //開始執行查詢
if Locate(ListBoxField.Items[ListBoxField.ItemIndex]+';'+ListBoxField2.Items[ListBoxField2.ItemIndex],VarArrayOf([Edit1.Text,Edit2.Text]),GetSearchOpition)=false then ShowMessage('沒有查詢到符合條件的記錄');
end; end; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then//若是是當前區域是被選擇區域 begin //設置被選擇區域的背景色 TDBGrid(sender).Canvas.Brush.Color := clInfoBk ; //設置被選擇區域的文字顏色 TDBGrid(sender).Canvas.Font.Color:= clFuchsia ; end else //若是是當前區域不是被選擇區域 begin //若是是偶數行,則背景色爲clSkyBlue if ADOQuery1.RecNo mod 2 = 0 then TDBGrid(sender).Canvas.Brush.Color := clSkyBlue else //若是是奇數行,則背景色爲clInactiveCaptionText TDBGrid(sender).Canvas.Brush.Color := clInactiveCaptionText; end; //調用默認的繪圖函數 TDBGrid(sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); with TDBGrid(sender).Canvas do begin //設置表格橫線的顏色 Pen.Color := clPurple ; MoveTo(Rect.Left, Rect.Bottom); //畫表格橫線 LineTo(Rect.Right, Rect.Bottom); //設置表格豎線的顏色 Pen.Color := clNavy; MoveTo(Rect.Right, Rect.Top); //畫表格豎線 LineTo(Rect.Right, Rect.Bottom); end; end
|