Очистити всю таблицю DBF за допомогою SQL

Ось уже дісталася мені спадщина: ( Не думав, що доведеться повернутися в кам'яний вік. FoxPro

Хто допоможе SQL-но очистити таблицю DBF? А то DML delete from TABLE_NAME викликає тільки позначку записів, що видаляються, але не фізичну їх смерть.

За допомогою SQL ніяк. SQL не працює на рівні контейнера.

> Ось уже дісталася мені спадщина.

У своїй біді ти не самотній - багато хто несуть такий самий хрест)

Щось прокльовується. Типу "delete from TABLE_NAME" "pack TABLE_NAME" Тільки між ними щось треба зробити типу закриття конекції або комітія транзакції (а то лається, що DBF зайнятий).

Нормально відпрацювало. Треба тільки між DML закрити і відкрити з'єднання (ось вже танці з бубнами).

zap TABLE_NAME. якщо працювати через VFP драйвер

"pack TABLE_NAME" і "zap TABLE_NAME" не є SQL командами, вони просто видаються інтерпретатору FoxPro для обробки. До речі, оскільки очистити треба всю таблицю, то друге правильно, без будь-якого "delete from TABLE_NAME".

Інтерпритатору FoxPro можна передати будь-яку команду, включаючи SQL, який також включений до Інтерпритатора FoxPro. Потрібно просто зрозуміти, що в даному випадку ведеться пряма робота з інтерпретатором, а не з SQL

Чим не сподобалося Delete Table + Create Table?

В даному випадку ведеться робота з провайдером VFPOLEDB. Дякуємо за наведення на цінну думку: треба б спробувати, як працюватиме додаток на "чистій" машині - без встановленого FoxPro, а тільки з провайдером.

А, до речі, DBF-івський SQL параметрів не підтримує? Мені не вдалося досягти: (

> Віталій Панасенко(будинок) (26.08.08 20:11) [5] > zap TABLE_NAME. якщо працювати через VFP драйверzap TABLE_NAME черезPleDb провайдер: Command contains unrecognized phrase/keyword.

Там, у VFPOLEDB? багато ще чого не працює або працює не дуже прямо. Якщо хочеш мати повноцінний коректний доступ до фоксових премудростей, потрібно користувати повноцінний VFP ран-тайм модуль. Його можна встановлювати окремо як самостійний товар, тобто. Цілком MSVFP задля цього встановлювати не потрібно.

Дельфійська обгортка до VFPRTL теж існує, зветься foxauto

Очі б мої його не бачили! :) Маю ущербну приблуду на FoxPro, яку треба вкоротити. вибачте, ІНТЕГРУВАТИ, в існуючу автоматизовану систему. Маю MS VS 2005. А "VFP ран-тайм модуль" чим користується? COM-ом? Я-то робітничо-селянською з ADO.NET достукуюсь.

> "VFP ран-тайм модуль" чим користується? COM-ом?

Ага. Це і є СOM-сервер, тільки деяким чином хитрозадий - просто так засобами тривіального виклику CreateComObject до нього не достукатися, потрібна досить витончена "прокладка", якою foxauto і є.

Автор foxauto, мабуть, якраз дбав про бідолахи типу тебе)

> Курдль (27.08.08 12:52) [10]А ODBC Visual FoxPro Driver не можна юзати? Через OLE DB вийшло тільки через анус: Delete from, відключити ADOConnection, підключити і pack.

Мені треба витягувати туєву хучу дрібних базочок з різних папочек. (Між іншим, це дороге промислове рішення, розтиражоване не на одну велику компанію!). А ODBC спочатку треба налаштовувати. Чи ні? Програмно я цього робити не вмію. Зате OLEDB підсовуєш шлях до DBF-папки і все!

P.S. У мене Aqua Data Studio налаштована на доступ до тестових баз FoxPro через ODBC. Так там також без перепідключенняобнулити не вдається.

DRIVER=Microsoft Visual FoxPro Driver (*.dbf);UID=;PWD=;SourceDB=z:\all;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes; Зверни увагу на SourceDB Це рядок підключення ADOCOnnection

Та й, здається, можна тупо вказати SourceDB=c:\, а потім "танцювати" точно, так само, як і від аліасу БДЕ.. select * from "c:\dbf\dbf.dbf" і т.д. у тому числі і zap "c:\dbf\dbf.dbf"

select канає, ZAP - ні

З якого переляку zap повинен "канати"? FoxODBC-драйвер не повинен інтерпретувати будь-яку фоксову лабуду, що не має відношення до SQL92/99 і що з ними

Уявляю, як виглядали б мої пов'язані багатотабличні запити :)

> select канає, ZAP - ніТак і чого мені тоді списи ламати? OLEDB все ж таки рідніше для ADO.NET. Ось якби параметричні запити запрацювали.

> Просто "лобаду" типу PACK - канає

У xBase є унікальна можливість відновлювати видалені записи, крім того жодна мені відома база не робить упаковки після видалення. Просто деякі повторно використовують звільнене місце, але якщо треба зменшити розмір після видалення, треба запускати процедуру упаковки. У деяких СУБД це можна зробити за допомогою SQL-запиту, в інших треба запускати окрему утиліту.

Я ж тобі запропонував рішення в [11], [13] - там канає абсолютно все, що стосується фоксу і при цьому тф залишаєшся в звичному дельфійському середовищі з її дейтасетами

А я взагалі тупо після delete from TABLE_NAME роблю select* from TABLE_NAME і за допомогою BatchMove кидаю в таблицю з тим самим ім'ям. І начебто все працює і розмір не збільшується (як давно це було, і досі працює в одній конторі).

> Мені треба отримуватитуєву хучу дрібних базочок з різних папочек. > > (Між іншим, це дороге промислове рішення, розтиражоване > не на одну велику компанію!).

Дякую! Я не лізу своїм свинячим рилом у калашний ряд DBA. Мене не цікавлять проблеми упаковки БД. Мені важливо, щоб мої програми працювали справно в обумовлених ТЗ умовах апаратного та спец. програмного забезпечення. Ще мені важливо, щоб СУБД, що дозволяють використовувати SQL та DML над своїми даними, дотримувалися хоча б базових стандартів.

Який ще DBA для xBase – це завжди було турботою кінцевого користувача. Для цього Борланд надає BDE Admin для постачання кінцевому користувачеві. Крім того, програміст може помістити в меню обслуговування програми два пункти -

1. Очищення таблиці (EmptyTable – працює миттєво) 2. Стиснення таблиці (dbiPackTable)

Або може викликати другий пункт автоматично за певних умов. Але це стосується першої частини твого питання > Очистити всю таблицю DBF за допомогою SQL [dBase, FoxPro] Для VFPOLEDB це звичайно не підходить. Але тобі одне з рішень тобі привели (foxauto), друге ("pack TABLE_NAME" і "zap TABLE_NAME"), але ці два треба вміти застосовувати, просто так їх у запиті наводити не можна, треба викликати, що таке exec FOXPRO сомманд, точно я не пам'ятаю, оскільки FoxPro не використовую, але саме це приводили у форумах як рішення, і не хто не гарантує, що це буде працювати для всіх команд FoxPro

І про які базові стандарти SQL і DML, у частині упаковки або очищення таблиць, ти кажеш, такі операції стандартом не передбачені та реалізуються в різних СУБД по-різному, від запитів MS SQL до утиліт БДЕ чи функцій dbiPackTable/EmptyTable.