Страница: 1 | 2 |
Вопрос: Удаление всех записей в dbf файле
Добавлено: 18.10.05 10:23
Автор вопроса: SerJEANt | ICQ: 3132838
Приветствую!
Есть dbf файл, как лучше всего удалить в нем все записи?
1 способ: Ежели с помощью Adodc пытаюсь удалять записи, то выскакивает следующая ошибка:
Я думаю, такая вещь происходит поскольку в таблице нет ключевого поля.
2 способ: Удаляем с помощью DATA, все проходит нормально и файл оказывается пустым, но размер файла при таком удалении записей остается неизменным, что не есть хорошо.
Знаю про такую вещь, что записи "физически" из файла не удаляются, а только помечаются на удаление и тому подобное, но не знаю применимо ли это к данной ситуации?
3 способ: (если он вообще здесь применим) Это с помощью SQL, что-то вроде DELETE FROM TABLE, но здесь у меня возникают проблемы, я не знаю как мне это дело правильно написать.
Господа, какие будут предложения? Поможите особе приближенной к императору и отцу русской демократии :(
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 18.10.05 13:12
DROP TABLE <имя таблицы>
Номер ответа: 2
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #2
Добавлено: 18.10.05 14:03
Это удаление самой структуры. Для удаления данных - "ELETE * FROM Table1".
Размер файла остаётся прежним потому, что нужно ещё выполнить сжатие базы. В DAO это метод CompactDatabase, в ADO нужно подключить ещё Microsoft Jet and Replication Objects X.X Library.
Номер ответа: 3
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #3
Добавлено: 18.10.05 14:13
Этого тебе могут не позволить. Например тот-же safe_updates.
EMPTY TABLE <имя_таблицы>;
или
TRUNCATE TABLE <имя_таблицы>;
Это быстрее и надежнее
Номер ответа: 4
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #4
Добавлено: 18.10.05 14:14
Кроме того после truncate не надо сжимать базу, так как внутренний механизм на саом деле вместо удаления записей, удаляет всю таблицу, и создает новую на шаблоне удаленной. Это кстати, ещё и в десятки раз быстрее...
Номер ответа: 5
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #5
Добавлено: 18.10.05 14:17
GSerg
Оно самое, читал про такое, спасиб за наставление!
Господа, прошу простить мне моё незнание, но без объяснения на пальцах чувствую здесь не обойтись , у меня есть recordset подключенный к вышеуказанному файлу, куда его подставить ума не приложу, ежели пишу допустим:
Set rcdTest = Adodc1.Recordset
"ELETE * FROM rcdTest"
оно ессесно ругается на последнюю строчку. Что в моем случае подставлять на место Table1? Направьте на путь истинный, где копать?
Ps. Прошу не отсылать меня читать умные книжки ибо сейчас такой возможности нет, спасибо за ответ!
Номер ответа: 6
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #6
Добавлено: 18.10.05 14:23
with rcdTest
.RecordSource = "TRUNCATE TABLE rcdTest;"
.Refresh
End with
Номер ответа: 7
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #7
Добавлено: 18.10.05 14:41
Ошибку выдает:
[Мелкософт][ODBC dBase Driver] Syntax error in FROM clause.
PS. При подключении через ADODC использую строку подключения(Connection string) может здесь чего?
Номер ответа: 8
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #8
Добавлено: 18.10.05 14:43
Дай полный текст функции от инициализации до поключения и выполнения запроса.
Номер ответа: 9
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #9
Добавлено: 18.10.05 14:46
Нет.
Подобные команды выполняются в ADO через
set c.activeconnection=conn
c.commandtype=adcmdtext
c.commandtext="TRUNCATE TABLE Table1"
c.execute ,,adexecutenorecords
Номер ответа: 10
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #10
Добавлено: 18.10.05 14:47
Ага, спасибо, что поправил. Я по памяти писал
Номер ответа: 11
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #11
Добавлено: 18.10.05 15:09
Хорошо, упрощаю все до нельзя, нужно просто очистить базу:
Берем Adodc и DataGrid, цепляем к решетке Adodc. Далее цепляю файл к Adodc сразу "вручную", использую Connection string, строка выглядит так:
В рекордсурсе выбираю adCmdTable и указываю имя файла.
Далее просто пару строк кода:
Adodc1.Refresh
Все!
Номер ответа: 12
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #12
Добавлено: 18.10.05 15:22
Всё - что всё?
Всё работает?
Или всё не работает?
Или всё равно уже?
Номер ответа: 13
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #13
Добавлено: 18.10.05 15:32
Всё это значит всё дописал
А выдает ошибку такую:
[Мелкософт][ODBC dBase Driver] Syntax error in FROM clause.
Номер ответа: 14
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #14
Добавлено: 18.10.05 15:52
Adodc1.Refresh
Не Adodc1.Recordset а имя твоей таблицы.
Номер ответа: 15
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #15
Добавлено: 18.10.05 16:00
Андрей
Я предупреждал, что я из деревни Сейчас задам глупый вопрос, что есть "имя таблицы" в моей ситуации? Имя dbf-файла?