1. Поднятие вопроса
В недавнем проекте я столкнулся с проблемой работы ASP с таблицами библиотеки FoxPro (*.DBF). На самом деле существует множество прикладных программ, использующих таблицы DBF. Как использовать эти данные в сетевой среде, многие друзья остались в недоумении.
Я также проверил много информации и не смог найти подробного объяснения решения. После тестирования я изначально решил эту проблему и поделюсь ею со всеми.
В данной статье предпринята попытка решить следующие проблемы:
1. ASP присоединяется к свободной таблице (файл *.dbf), созданной FoxPro.
2. Одновременное сохранение нескольких типов данных и графических файлов в таблице dbf.
(Пример программы доступен по адресу Set conn = Server.CreateObject("ADODB.Connection").
connstr = "Driver={Драйвер Microsoft Visual FoxPro};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusive=No"
conn.Open connstr
В приведенном выше коде данные — это относительный путь, в котором находится мой файл DBF (относительно файла, в котором находится этот код), и он преобразуется в абсолютный путь через Server.MapPath(db).
http://www.connectionstrings.com предоставляет строки подключения для многих типов файлов таблиц библиотек. Для файлов DBF указаны следующие строки подключения:
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
Мне не удалось подключиться с помощью этой строки подключения, и я не проводил дальнейшего тестирования. Заинтересованные друзья могут попробовать указанную выше строку.
.www.downcodes.com
2. Объявите имя таблицы в инструкции SQL.
Вы можете объявить имя таблицы, с которой нужно работать, в инструкции SQL в форме [имя таблицы] или [имя таблицы.расширение]. Например, имя файла таблицы — t1.dbf, а инструкция SQL:
select * from [t1] или select * from [t1.dbf]
3. Операции хранения различных типов данных
DBF поддерживает не так много типов данных, среди которых стоит отметить Date (тип даты), Memo (тип заметки) и General (общий тип). Здесь мы сосредоточимся на данных типа данных. Типы Memo и Gen используются при хранении графических файлов, что будет объяснено позже.
Обычно я использую два метода для записи операций с базой данных: один — с помощью оператора вставки, а другой — с помощью метода addnew. Для таблиц DBF эти два метода немного отличаются.
При использовании оператора вставки обратите внимание, что формат записи данных типа даты — {^гггг-мм-дд}, а разделитель отличается от # в Access и SQL Server. Конкретный оператор SQL:
вставить в [t1.dbf] (имя,день рождения) значения («MyName»,{^1970-1-1})
При использовании метода addnew исходный код, который я использовал, был:
rst.open "[t1]",conn,0,3.
первый.addnew
rst(0).value = "МоеИмя"
первый(1).значение = {^1970-1-1}
первое обновление
первый.закрыть
При работе с SQL Server и Access проблем нет, но при работе с файлами DBF возникают проблемы. Поэкспериментировав, я наконец нашел правильный метод:
sql = "выбрать * из t1"
первый.open sql,conn,0,3
первый.addnew
rst(0).value = "МоеИмя"
первый(1).значение = {^1970-1-1}
первое обновление
rst.close
Обратите внимание, что разница между двумя приведенными выше фрагментами кода заключается главным образом в операторе SQL. Как упоминалось ранее, в операторах SQL вы можете объявлять файлы таблиц в форме [имя таблицы] или [имя таблицы.dbf], но при использовании метода addnew имя таблицы не может иметь расширение и нельзя добавлять квадратные скобки. в противном случае появится сообщение «Не простое имя таблицы, не может быть обновлено».
4. Хранение графических файлов
В таблице DBF поля «Мемо» и «Общие» можно использовать для хранения графики, аудио и видео, текстовых и других файлов (см. http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 ). Здесь мы устанавливаем тип поля memo(binary) (двоичный тип подготовки), используем метод rst(n).AppendChunk() для записи двоичных данных результирующего изображения и используем метод Response.BinaryWrite() для восстановления двоичных данных. данные для изображения. О хранилищах изображений написано много статей, поэтому я не буду здесь вдаваться в подробности.
Что касается использования поля «Общие» для хранения картинок, я попробовал, но не получилось, поэтому больше не пробовал.
5. Удаление данных
Вы можете использовать оператор удаления для удаления данных, но когда вы откроете файл таблицы после удаления, вы обнаружите, что данные только помечены для удаления и фактически не удаляются из таблицы. В Foxpro используйте команду Pack для окончательного удаления данных. После проверки некоторой информации было сказано, что VB не может реализовать операцию упаковки, и, конечно же, VBS не может ее реализовать. Общее решение состоит в том, чтобы время от времени импортировать данные в таблице (разумеется, без отметки удаления) в новую таблицу, удалять исходную таблицу, а затем переименовывать новую таблицу в исходное имя таблицы.
6. Данные и изображения хранятся в базе данных одновременно.
Эта проблема выходит за рамки данной статьи. В Интернете есть множество статей, предлагающих решения, я, кстати, упомяну о них здесь.
Я реализовал эту функцию с помощью программы бескомпонентной загрузки Huajing. Некоторые друзья могут спросить: загрузка «Huajing» записывается в виде файла, и ее невозможно сохранить в базе данных. Неплохо, но с небольшим изменением можно получить двоичные данные изображения и затем сохранить их в базе данных. В моем примере изменения в среде программы прокомментированы, обращайтесь к ним.
4. Заключение
В этой статье в основном обсуждается работа ASP со свободными таблицами DBF. Если это библиотека DBC, соответствующая строка подключения приведена в примере в inc/conn.asp.
На данный момент я считаю, что друзья имеют общее представление о работе таблиц DBF. В сочетании с моими примерами я считаю, что вы можете разработать больше функций.
УДАЧИ!