Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];

Вниз

Очистить всю таблицу DBF с помощью SQL   Найти похожие ветки 

 
Курдль   (2008-08-26 17:00) [0]

Вот уж досталось мне наследие :(
Не думал, что придется вернуться в каменный век... FoxPro

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


 
Сергей М. ©   (2008-08-26 17:08) [1]

С помощью SQL никак.
SQL не работает на уровне контейнера.


 
Сергей М. ©   (2008-08-26 17:10) [2]


> Вот уж досталось мне наследие


В своей беде ты не одинок - многие несут такой же крест)


 
Курдль   (2008-08-26 17:16) [3]

Что-то проклевывается.
Типа

"delete from TABLE_NAME"
"pack TABLE_NAME"

Только между ними что-то надо предпринять типа закрытия коннекции или коммития транзакции (а то ругается, что DBF занят).


 
Курдль   (2008-08-26 17:27) [4]

Нормально отработало.
Надо только между DML закрыть и открыть соединение (вот уж танцы с бубнами).


 
Виталий Панасенко(дом)   (2008-08-26 20:11) [5]

zap TABLE_NAME... если работать через VFP драйвер


 
Anatoly Podgoretsky ©   (2008-08-27 00:49) [6]

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

Интерпритатору FoxPro можно передать любую команду, включая SQL, который также включен в Интерпритатор FoxPro. Надо просто понять, что в данном случае ведется прямая работа с интерпритатором, а не с SQL


 
MsGuns ©   (2008-08-27 11:19) [7]

Чем не понравилось Delete Table + Create Table ?


 
Курдль   (2008-08-27 12:35) [8]


> Anatoly Podgoretsky ©   (27.08.08 00:49) [6]
> Надо просто понять, что в данном случае ведется прямая работа
> с интерпритатором, а не с SQL


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


 
Курдль   (2008-08-27 12:40) [9]

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


 
Курдль   (2008-08-27 12:52) [10]


> Виталий Панасенко(дом)   (26.08.08 20:11) [5]
> zap TABLE_NAME... если работать через VFP драйвер

zap TABLE_NAME через PleDb провайдер:
Command contains unrecognized phrase/keyword.


 
Сергей М. ©   (2008-08-27 14:22) [11]


> Курдль   (27.08.08 12:52) [10]


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

Дельфийская обертка к VFPRTL тоже существует, зовется foxauto


 
Курдль   (2008-08-27 14:56) [12]


> Сергей М. ©   (27.08.08 14:22) [11]
> Если хочешь иметь полноценный корректный доступ к фоксовым
> премудростям, нужно пользовать полноценный VFP ран-тайм
> модуль.


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


 
Сергей М. ©   (2008-08-27 15:04) [13]


> "VFP ран-тайм модуль" чем юзается? COM-ом?


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

Автор foxauto, видимо, как раз заботился о горемыках типа тебя)


 
Виталий Панасенко ©   (2008-08-27 15:27) [14]


> Курдль   (27.08.08 12:52) [10]

А ODBC Visual FoxPro Driver нельзя юзать? Через OLE DB получилось только через анус: Delete from, отключить ADOConnection, подключить и pack.. без отключения/подключения получаю File in use


 
Курдль   (2008-08-27 15:46) [15]


> Виталий Панасенко ©   (27.08.08 15:27) [14]
>
>
> > Курдль   (27.08.08 12:52) [10]
>
> А ODBC Visual FoxPro Driver нельзя юзать? Через OLE DB получилось
> только через анус: Delete from, отключить ADOConnection,
>  подключить и pack.. без отключения/подключения получаю
> File in use


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

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


 
Виталий Панасенко ©   (2008-08-27 15:52) [16]

DRIVER=Microsoft Visual FoxPro Driver (*.dbf);UID=;PWD=;SourceDB=z:\all;SourceType=DBF;Exclusive=No;BackgroundFetch=Ye s;Collate=Machine;Null=Yes;Deleted=Yes;
Обрати внимание на SourceDB
Это строка подключения ADOCOnnection


 
Виталий Панасенко ©   (2008-08-27 15:55) [17]

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


 
Виталий Панасенко ©   (2008-08-27 15:58) [18]

select канает, ZAP - нет


 
Сергей М. ©   (2008-08-27 16:29) [19]


> Виталий Панасенко ©   (27.08.08 15:58) [18]
>
> select канает, ZAP - нет
>


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


 
Курдль   (2008-08-27 16:43) [20]


> Виталий Панасенко ©   (27.08.08 15:55) [17]
> Да и, кажись, можно тупо указать SourceDB=c:\, а затем "плясать"
> точно, так же, как и от алиаса БДЕ.. select * from "c:\dbf\dbf.dbf"


Представляю, как бы выглядели мои связанные многотабличные запросы :)


> select канает, ZAP - нет

Так и чего мне тогда копья ломать? OLEDB все же роднее для ADO.NET.
Вот если бы параметрические запросы заработали...


 
Виталий Панасенко(дом)   (2008-08-27 19:26) [21]


> Сергей М. ©   (27.08.08 16:29) [19]

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


 
Сергей М. ©   (2008-08-27 21:12) [22]


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


А завтра, немаловероятно, автору потребуется, скажем, реиндексация.
А "просто "лобуда" типа REINDEX" при ODBC-решении не "проканает".
А автор уже сделал ставку на ODBC и настрогал уже кучу кода.


 
Polevi ©   (2008-08-27 21:54) [23]

TRUNCATE TABLE ?


 
Курдль   (2008-08-27 22:04) [24]


> Сергей М. ©   (27.08.08 16:29) [19]
> С какого перепугу zap обязан "канать" ?
> FoxODBC-драйвер не обязан интерпретировать всякую фоксовую
> лабуду, не имеющую отношения к SQL92/99 и иже с ними

Да! Но тогда нехило бы, шоб на SQL92/99 канало простое человеческое delete from TABLE_NAME! И при этом таблица свято очищалась бы от записей. Вот бы я возрадовался и на даже на форум бы не полез за запами и паками!


 
Anatoly Podgoretsky ©   (2008-08-27 23:24) [25]

> Курдль  (27.08.2008 22:04:24)  [24]

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


 
Германн ©   (2008-08-28 01:31) [26]


> Сергей М. ©   (26.08.08 17:10) [2]
>
>
> > Вот уж досталось мне наследие
>
>
> В своей беде ты не одинок - многие несут такой же крест)
>

+1


 
Сергей М. ©   (2008-08-28 08:29) [27]


> Курдль   (27.08.08 22:04) [24]


Я ж тебе предложил решение в [11],[13] - там канает абсолютно все касаемое фокса и при этом тф остаешься в привычной дельфийской среде с ее дейтасетами


 
Раиса ©   (2008-08-28 15:03) [28]

А я вообще тупо после delete from TABLE_NAME делаю select * from TABLE_NAME  и с помощью BatchMove кидаю в таблицу с тем же именем. И вроде все работает и размер не увнличивается (как давно это было, и до сих пор работает в одной конторе).


 
Виталий Панасенко ©   (2008-08-28 15:47) [29]


> Раиса ©   (28.08.08 15:03) [28]
> А я вообще тупо после delete from TABLE_NAME делаю select
> * from TABLE_NAME  

И, цикаво, что ж тогда у нас там выбирается? Данные то уже удалены


 
Игорь Шевченко ©   (2008-08-28 15:55) [30]


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


Автора!


 
Раиса ©   (2008-08-28 16:06) [31]

Виталий Панасенко ©   (28.08.08 15:47) [29]

Выбирается всё, что там осталось после удаления по условию Where, например. Я подумала, что и автор вопроса удаляет не все записи, а по условию.


 
Сергей М. ©   (2008-08-28 16:29) [32]

Удалено модератором


 
Курдль   (2008-08-29 14:33) [33]


> Anatoly Podgoretsky ©   (27.08.08 23:24) [25]
> У xBase есть уникальная возможность восстанавливать удаленые
> записи, кроме того ни обна мне известная база не делает
> упаковки после удаления. Просто некоторые повторно используют
> освобожденое место, но если надо уменьшить размер после
> удаления, то надо запускать процедуру упаковки. В некоторых
> СУБД это можно сделать с помощью SQL запроса, в других надо
> запускать отдельную утилиту.


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


> Сергей М. ©   (28.08.08 08:29) [27]
> Я ж тебе предложил решение в [11],[13] - там канает абсолютно
> все касаемое фокса и при этом тф остаешься в привычной дельфийской
> среде с ее дейтасетами

Спасибо! Я не могу себе позволить нагромождать проект специфическими драйверами, протоколами компонентами и т.п.


 
Anatoly Podgoretsky ©   (2008-08-29 15:45) [34]

> Курдль  (29.08.2008 14:33:33)  [33]

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

1. Очистка таблицы (EmptyTable - работает мгновенно)
2. Сжатие таблицы (dbiPackTable)

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

И еще поскольку речь идет об полной очистке таблицы, то zap можно заменить удалением и копированием из папочки пустого шаблона. Или воссозданием таблицы с нуля CREATE TABLE, ну и еще множества способов, зависит от фантазии.

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.007 c
2-1237228291
IvanWan
2009-03-16 21:31
2009.04.26
TEdit/TMemo +Unicode


15-1235018054
Александр Ищущий
2009-02-19 07:34
2009.04.26
Задача на Delphi. База Данных.


15-1235424601
Юрий
2009-02-24 00:30
2009.04.26
С днем рождения ! 24 февраля 2009 вторник


15-1235601511
Petr V. Abramov
2009-02-26 01:38
2009.04.26
о политике модерирования


2-1237106993
ML
2009-03-15 11:49
2009.04.26
Процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский