Текущий архив: 2004.05.02;
Скачать: CL | DM;
Вниз
Удаление записей из dbf Найти похожие ветки
← →
wild_arg © (2004-04-07 17:12) [0]Необходимо через ADO удалить все записи из некоего файла, типа "таблица.dbf".
Пробовали через ADOQuery, типа"Delete from Таблица.dbf"
- он в dbf-нике помечает все записи на удаление.ADOTable.DeleteRecords
- тоже ничего не дал, вообще выкинул какую-то ошибку
Можно как-то реально удалить все записи?
← →
Anatoly Podgoretsky © (2004-04-07 17:19) [1]А ты эту ошибку тоже зря выкинул.
← →
wild_arg © (2004-04-07 17:25) [2]Выкинутая ошибка: Operation is not allowed in this context
← →
Семен Сорокин © (2004-04-07 17:26) [3]Так паковать же надо dbf после удаления.
← →
Семен Сорокин © (2004-04-07 17:29) [4]используй драйвер microsoft FoxPro VFP Driver (*.dbf) там есть метод Pack или пересозданием таблицы.
← →
wild_arg © (2004-04-07 17:36) [5]2Семен Сорокин
есть только ADO и ОDBC :) с этим инструментарием можно по...удалять все записи. Если можно, то приведите отрывок кода.
← →
Anatoly Podgoretsky © (2004-04-07 17:38) [6]wild_arg © (07.04.04 17:36) [5]
Можно - Delete from Table.dbf
← →
wild_arg © (2004-04-07 17:41) [7]2Anatoly Podgoretsky
см. выше :) самый первый пост - такое уже пробовали
← →
Anatoly Podgoretsky © (2004-04-07 17:43) [8]Ну и что, во первых у меня немного по другому, во вторых это работает только в правильно написанной программе, про твою ничего неизвестно.
← →
wild_arg © (2004-04-07 17:52) [9]2Anatoly Podgoretsky
Слушай, чё за необоснованные наезды? Чего там может быть неправильного?with TADOQuery.Create(Self) do begin
Connection := ADOConnection1;
SQL.Text := "delete from Таблица.dbf";
Execute;
Free;
end;
Не факт, что здесь приведено правильно - это я здесь написал - но принцип тот же. О правильности кода сужу потому, что он записи в таблице обрабатывает, но только лишь помечает на удаление. Ведь если бы код был некорректен - то он бы ничего не делал, либо вызывал ошибки.
← →
Anatoly Podgoretsky © (2004-04-07 17:56) [10]Это вся программа?
Насчет ошибок, значит ты обманывал, когда говорил, что выдает какую то ошибку, а сейчас оказывается не выдает.
Тут еще и не иввестное ADOConnection1
← →
Семен Сорокин © (2004-04-07 18:17) [11]Anatoly Podgoretsky © (07.04.04 17:56) [10]
хватит над человеком прикалываться :))
wild_arg © (07.04.04 17:12)
тебе проще сделать SELECT INTO в новую таблицу, а старую удалить.
← →
Anatoly Podgoretsky © (2004-04-07 19:13) [12]Семен Сорокин © (07.04.04 18:17) [11]
А зачем так делать, когда Delete From Table прекрасно работает?
А ты ему на порядок более сложную задачу подсовываешь.
← →
AndrewK © (2004-04-08 09:21) [13]Вот такая процедура выдает сообщение 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 поностью?
← →
AndrewK © (2004-04-08 09:58) [14]Ну или переформулирую вопрос: Как упаковать таблицу dbf средствами Delphi через ADO?
← →
Anatoly Podgoretsky © (2004-04-08 10:09) [15]Так ты не удалить хочешь, а упаковать таблицы, тогда кажется только VFP драйвер может.
Страницы: 1 вся ветка
Текущий архив: 2004.05.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.028 c