![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать таблицу ADO+Access... [D5, Access]
Галинка © (2004-10-04 09:49:00)Вот собственно говоря и весь вопрос...
Галинка (2004-10-08 15:57:00) [1]А весь код такой:
procedure TMainForm.CalcNew1Execute(Sender: TObject);
var
Dialog1:TMDBSelectDlg;
Dialog2, Dialog3:TMDBEditDlg;
IntervalDlg:TIntervalsDlg;
i:Integer;
begin
TekActionValue:=0;
Dialog1:=TMDBSelectDlg.Create(Application);
with Dialog1 do
try
ShowModal;
if ModalResult=mrOK then
Dialog2:=TMDBEditDlg.Create(Application);
with Dialog2 do
try
ShowModal;
if ModalResult=mrOK then
begin
Raschet.FullCalculate; {Расчитываем коэффициенты}
IntervalDlg:=TIntervalsDlg.Create(Application);
with IntervalDlg do
try
if IntervalDlg.ShowModal=mrOK then
begin
try
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'+TableNameStr+'_Epic (InNNID autoincrement Not Null Primary Key, K_max Single, H_gip Single)';
ZemlDM.ADOCommand1.Execute;
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'+TableNameStr+'_Radiusy (InIID autoincrement Not Null Primary Key, InNNID Integer, I_tek Single, BolRad Single, MalRad Single)';
ZemlDM.ADOCommand1.Execute;
except
on EOleException do
begin
if (MessageDlg('Таблица с общим именем '+ TableNameStr+' уже существует!'+#13+#10+'Записать данные в другую таблицу?',mtWarning,[mbYes, mbNo],0)=mrYes) then
with TTableNameSelectDlg.Create(Application) do
try
if ShowModal=mrOK then
begin
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'+TableNameStr+'_Epic (InNNID autoincrement Not Null Primary Key, K_max Single, H_gip Single)';
ZemlDM.ADOCommand1.Execute;
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'+TableNameStr+'_Radiusy (InIID autoincrement Not Null Primary Key, InNNID Integer, I_tek Single, BolRad Single, MalRad Single)';
ZemlDM.ADOCommand1.Execute;
end;
finally
Free;
end
else
begin
ZemlDM.ADOCommand1.CommandText:='Delete from Rez_'+TableNameStr+'_Epic';
ZemlDM.ADOCommand1.Execute;
ZemlDM.ADOCommand1.CommandText:='Delete from Rez_'+TableNameStr+'_Radiusy';
ZemlDM.ADOCommand1.Execute;
end;
end;
end;
{Расчитываем Радиусы}
DecimalSeparator:='.';
Tek_K:=K_min;i:=0;
repeat
Tek_h:=h_min;
repeat
ZemlDM.ADOCommand1.CommandText:=Format('Insert Into Rez_'+TableNameStr+'_Epic (K_max, H_gip) Values (%f, %f)', [Tek_K, Tek_H]);
ZemlDM.ADOCommand1.Execute;
inc(i);
Tek_i:=2;
repeat
TekIzoParam:=Raschet.GetDelta(TekKoefD, TekKoefP, Tek_h, Tek_K, Tek_i);
if TekIzoParam.rad_min>0 then
begin
ZemlDM.ADOCommand1.CommandText:=Format('Insert Into Rez_'+TableNameStr+'_Radiusy (InNNID, I_Tek, BolRad, MalRad) Values (%d, %f, %f, %f)', [i, TekIzoParam.I, TekIzoParam.rad_max, TekIzoParam.rad_min]);
ZemlDM.ADOCommand1.Execute;
end;
Tek_i:=Tek_i+0.5;
until (TekIzoParam.rad_min<0) or (TekIzoParam.rad_max<0);
Tek_h:=Tek_h+h_step;
until Tek_h>h_max;
Tek_K:=Tek_K+K_step;
until Tek_K>K_max;
DecimalSeparator:=',';
SetLength(TablesNames,1);
TablesNames[0]:='Rez_'+TableNameStr+'_Epic';
SetLength(TablesNames,2);
TablesNames[1]:='Rez_'+TableNameStr+'_Radiusy';
SetLength(FieldNames,1);
FieldNames[0]:='K_max';
SetLength(FieldNames,2);
FieldNames[1]:='H_gip';
SetLength(FieldNames,3);
FieldNames[2]:='I_tek';
SetLength(FieldNames,4);
FieldNames[3]:='BolRad';
SetLength(FieldNames,5);
FieldNames[4]:='MalRad';
TekMasterDetailFields:='InNNID;InNNID';
Dialog3:=TMDBEditDlg.Create(Application);
with Dialog3 do
if ShowModal=mrOK then
begin
if (MessageDlg('Хотите построить схему?',mtInformation,[mbYes, mbNo],0)=mrYes) then
CreateMDIChild(TableNameStr);
end;
end;
finally
Free;
end;
end;
finally
Free;
end;
finally
Free;
end;
end;
procedure TMDBEditDlg.OKBtnClick(Sender: TObject);
begin
Visible:=false;
TekArPZ:=ArZemlInit;
ZemlDM.ADOTable1.Active:=false;
ZemlDM.ADOTable2.Active:=false;
ZemlDM.ADOTable2.MasterFields:='';
end;
procedure TMDBEditDlg.FormCreate(Sender: TObject);
var
Ni,Nf,N_Item:integer;
begin
ZemlDM.ADOTable1.TableName:=TablesNames[0];
ZemlDM.ADOTable2.TableName:=TablesNames[1];
ZemlDM.ADOTable1.Active:=true;
ZemlDM.ADOTable2.Active:=true;
DBGrid1.Columns.Clear;
DBGrid2.Columns.Clear;
N_Item:=0;
for Nf:=0 to High(FieldNames) do
begin
for Ni:=0 to ZemlDM.ADOTable1.FieldCount-1 do
if FieldNames[Nf]=ZemlDM.ADOTable1.Fields[Ni].FieldName
then
begin
DBGrid1.Columns.Add;
DBGrid1.Columns.Items[N_Item].Field:=ZemlDM.ADOTable1.FieldByName(FieldNames[Nf]);
inc(N_Item);
end;
end;
N_Item:=0;
for Nf:=0 to High(FieldNames) do
begin
for Ni:=0 to ZemlDM.ADOTable2.FieldCount-1 do
if FieldNames[Nf]=ZemlDM.ADOTable2.Fields[Ni].FieldName
then
begin
DBGrid2.Columns.Add;
DBGrid2.Columns.Items[N_Item].Field:=ZemlDM.ADOTable2.FieldByName(FieldNames[Nf]);
inc(N_Item);
end;
end;
ZemlDM.ADOTable2.MasterFields:=TekMasterDetailFields;
end;
Будут еще вопросы ДОБРО ПОЖАЛОВАТЬ...
Заранее спасибо, если ответы по делу...
Галинка (2004-10-08 15:52:00) [2]Создание получается, а использование (((...
Вот код создания:
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'
+TableNameStr+'_Epic
(InNNID autoincrement Not Null Primary Key, K_max Single,
H_gip Single)';
ZemlDM.ADOCommand1.Execute;
ZemlDM.ADOCommand1.CommandText:='Create Table Rez_'
+TableNameStr+'_Radiusy
(InIID autoincrement Not Null Primary Key, InNNID
Integer, I_tek Single, BolRad Single, MalRad Single)';
ZemlDM.ADOCommand1.Execute;
Вот код заполнения:
ZemlDM.ADOCommand1.CommandText:=Format('Insert Into
Rez_'+TableNameStr+'_Epic (K_max, H_gip) Values (%f, %f)',
[Tek_K, Tek_H]);
ZemlDM.ADOCommand1.Execute;
ZemlDM.ADOCommand1.CommandText:=Format('Insert Into
Rez_'+TableNameStr+'_Radiusy (InNNID, I_Tek, BolRad,
MalRad) Values (%d, %f, %f, %f)', [i, TekIzoParam.I,
TekIzoParam.rad_max, TekIzoParam.rad_min]);
ZemlDM.ADOCommand1.Execute;
Создается все и заполняется прекрасно, а вот использовать не получается...
ЮЮ (2004-10-04 09:50:00) [3]выполнить запрос CREATE TABLE ...