![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление записей из dbf [D6]
wild_arg © (2004-04-07 17:12:00)Необходимо через ADO удалить все записи из некоего файла, типа "таблица.dbf".
Пробовали через ADOQuery, типа"Delete from Таблица.dbf"- он в dbf-нике помечает все записи на удаление.
ADOTable.DeleteRecords- тоже ничего не дал, вообще выкинул какую-то ошибку
Можно как-то реально удалить все записи?
Anatoly Podgoretsky (2004-04-08 10:09:00) [1]Так ты не удалить хочешь, а упаковать таблицы, тогда кажется только VFP драйвер может.
AndrewK (2004-04-08 09:58:00) [2]Ну или переформулирую вопрос: Как упаковать таблицу dbf средствами Delphi через ADO?
AndrewK (2004-04-08 09:21:00) [3]Вот такая процедура выдает сообщение Operation is not allowed in this context
procedure TfrmDlgExportCompanyToLotus.ExportCompanyList;
var I : Integer;
vODBC : TADOTable;
vStep, vCurPos : Real;
begin
dbConn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN='+Trim(edtODBC.Text)+';DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"';
dbConn.Connected := True;
Gauge.MaxValue := 100;
Gauge.Progress := 0;
vCurPos := 0;
with DM.spOpen('_exp_spCompanyListToLotus', []) do
try
btnOK.Enabled := False;
btnCancel.Enabled := False;
Screen.Cursor := crHourGlass;
vStep := 100 / RecordCount;
vODBC := TADOTable.Create(nil);
vODBC.Connection := dbConn;
vODBC.TableName := Trim(edtTableName.Text);
vODBC.Open;
vODBC.DeleteRecords;
First;
for I := 1 to RecordCount do begin
vODBC.Insert;
vODBC.FieldByName('M_ID').AsInteger := FieldByName('M_ID').AsInteger;
vODBC.FieldByName('S_ID').AsInteger := FieldByName('S_ID').AsInteger;
vODBC.FieldByName('M_SNAME').AsString := FieldByName('M_SNAME').AsString;
vODBC.FieldByName('S_SNAME').AsString := FieldByName('S_SNAME').AsString;
vODBC.FieldByName('S_FNAME').AsString := FieldByName('S_FNAME').AsString;
vODBC.FieldByName('TZ').AsString := FieldByName('TZ').AsString;
vODBC.Post;
vCurPos := vCurPos + vStep;
Gauge.Progress := Round(vCurPos);
Application.ProcessMessages;
Next;
end;
finally
vODBC.Close;
vODBC.Free;
Free;
dbConn.Connected := False;
Gauge.Progress := 0;
vCurPos := 0;
Screen.Cursor := crDefault;
btnOK.Enabled := True;
btnCancel.Enabled := True;
end;
end;
А вот такая процедура ошибок не выдает, но и не удаляет (только помечает все записи как удаленные)
procedure TfrmDlgExportCompanyToLotus.ExportCompanyList;
var I : Integer;
vODBC : TADOTable;
vStep, vCurPos : Real;
begin
dbConn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN='+Trim(edtODBC.Text)+';DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"';
dbConn.Connected := True;
Gauge.MaxValue := 100;
Gauge.Progress := 0;
vCurPos := 0;
with TADOQuery.Create(nil) do
try
Connection := dbConn;
SQL.Text := 'Delete * from '+Trim(edtTableName.Text);
ExecSQL;
finally
Free;
end;
with DM.spOpen('_exp_spCompanyListToLotus', []) do
try
btnOK.Enabled := False;
btnCancel.Enabled := False;
Screen.Cursor := crHourGlass;
vStep := 100 / RecordCount;
vODBC := TADOTable.Create(nil);
vODBC.Connection := dbConn;
vODBC.TableName := Trim(edtTableName.Text);
vODBC.Open;
First;
for I := 1 to RecordCount do begin
vODBC.Insert;
vODBC.FieldByName('M_ID').AsInteger := FieldByName('M_ID').AsInteger;
vODBC.FieldByName('S_ID').AsInteger := FieldByName('S_ID').AsInteger;
vODBC.FieldByName('M_SNAME').AsString := FieldByName('M_SNAME').AsString;
vODBC.FieldByName('S_SNAME').AsString := FieldByName('S_SNAME').AsString;
vODBC.FieldByName('S_FNAME').AsString := FieldByName('S_FNAME').AsString;
vODBC.FieldByName('TZ').AsString := FieldByName('TZ').AsString;
vODBC.Post;
vCurPos := vCurPos + vStep;
Gauge.Progress := Round(vCurPos);
Application.ProcessMessages;
Next;
end;
finally
vODBC.Close;
vODBC.Free;
Free;
dbConn.Connected := False;
Gauge.Progress := 0;
vCurPos := 0;
Screen.Cursor := crDefault;
btnOK.Enabled := True;
btnCancel.Enabled := True;
end;
end;
Вот и вопрос: как очистить файл *.dbf в версии DBase IV поностью?
Anatoly Podgoretsky (2004-04-07 19:13:00) [4]Семен Сорокин © (07.04.04 18:17) [11]
А зачем так делать, когда Delete From Table прекрасно работает?
А ты ему на порядок более сложную задачу подсовываешь.
Семен Сорокин (2004-04-07 18:17:00) [5]Anatoly Podgoretsky © (07.04.04 17:56) [10]
хватит над человеком прикалываться :))
wild_arg © (07.04.04 17:12)
тебе проще сделать SELECT INTO в новую таблицу, а старую удалить.
Anatoly Podgoretsky (2004-04-07 17:56:00) [6]Это вся программа?
Насчет ошибок, значит ты обманывал, когда говорил, что выдает какую то ошибку, а сейчас оказывается не выдает.
Тут еще и не иввестное ADOConnection1
wild_arg (2004-04-07 17:52:00) [7]2Anatoly Podgoretsky
Слушай, чё за необоснованные наезды? Чего там может быть неправильного?
with TADOQuery.Create(Self) do begin
Connection := ADOConnection1;
SQL.Text := 'delete from Таблица.dbf';
Execute;
Free;
end;
Не факт, что здесь приведено правильно - это я здесь написал - но принцип тот же. О правильности кода сужу потому, что он записи в таблице обрабатывает, но только лишь помечает на удаление. Ведь если бы код был некорректен - то он бы ничего не делал, либо вызывал ошибки.
Anatoly Podgoretsky (2004-04-07 17:43:00) [8]Ну и что, во первых у меня немного по другому, во вторых это работает только в правильно написанной программе, про твою ничего неизвестно.
wild_arg (2004-04-07 17:41:00) [9]2Anatoly Podgoretsky
см. выше :) самый первый пост - такое уже пробовали
Anatoly Podgoretsky (2004-04-07 17:38:00) [10]wild_arg © (07.04.04 17:36) [5]
Можно - Delete from Table.dbf
wild_arg (2004-04-07 17:36:00) [11]2Семен Сорокин
есть только ADO и ОDBC :) с этим инструментарием можно по...удалять все записи. Если можно, то приведите отрывок кода.
Семен Сорокин (2004-04-07 17:29:00) [12]используй драйвер microsoft FoxPro VFP Driver (*.dbf) там есть метод Pack или пересозданием таблицы.
Семен Сорокин (2004-04-07 17:26:00) [13]Так паковать же надо dbf после удаления.
wild_arg (2004-04-07 17:25:00) [14]Выкинутая ошибка: Operation is not allowed in this context
Anatoly Podgoretsky (2004-04-07 17:19:00) [15]А ты эту ошибку тоже зря выкинул.