Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218

Как создать DBF через Delphi (программно)?

18.09.2014, 09:37. Показов 9595. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла следующая проблема: нужно создать dbf таблицу через delphi, которая будет работать с Visual FoxPro(FoxPro).
С DBF я раньше не работал.
Нужен простой пример как с помощью SQL-запросов создать таблицу, состоящую из 3 столбцов(разных типов) и 2 строк.
Добавить/удалить/переименовать столбцы(если возможно).
Добавить/удалить записи +навигация.
Заполнение записи (обращение к записи/ячейке).

Используемое ПО: windows 7 ultimate x64, delphi xe3 lite + драйвер microsoft ole db provider for visual foxpro.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2014, 09:37
Ответы с готовыми решениями:

Как программно создать компонент в Delphi 7 ?
В программе требуется создавать 'X' компонентов (например Edit1). Как это реализовать?

Как программно создать базу данных Access и таблицы в ней на Delphi
Как программно создать базу данных Access и таблицы в ней на Delphi

Как программно можно конвертировать .dbf в .mdf на дельфи?
Как программно можно конвертировать .dbf в .mdf на дельфи?

23
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
18.09.2014, 11:26
Лучший ответ Сообщение было отмечено Razdolbait как решение

Решение

состряпал примерчик...
просто создание DBF
Вложения
Тип файла: rar ado12Project1.rar (272.6 Кб, 227 просмотров)
1
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
18.09.2014, 12:11  [ТС]
Именно то что нужно! Спасибо)
Но при попытке заполнить эту таблицу выскакивает ошибка "Недостаточно сведений из базовой таблицы для обновления" (при сохранении записи в DBNavigator). Да и через запросы не получается.Project1.rar
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
18.09.2014, 12:20  [ТС]
С помощью DBFViewer изменения вносятся, в моей программе отображаются
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
18.09.2014, 13:26
Razdolbait,
попробуй изменить место размещения курсора в ADOQUery1 на CursorLocation = clUseServer

только не спрашивай меня, что это и для чего нужно! я нагуглил. понятия не имею, для чего это!

вставку я бы всё таки через отдельный ADOQuery производил.
пример - Project1.rar

Косяк похоже в том, что поле Numeric 10 - получается, с точки зрения VFP вещественное.
попробуй с ним как Float полем работать


я вообще с DBF больше люблю через TDBF работать.
Если не нужны особенности формата VFP - то это милое дело!
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
18.09.2014, 13:35
Razdolbait, а ещё, чисто гипотетически, ошибка может быть связана с именем поля Name!

попробуй изменить его на любое другое (TSTNAME, например) и проверить работу...
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
18.09.2014, 15:53  [ТС]
Сомневаюсь что поле name в чем-то виновато. Имя поля довольно актуально, не думаю что оно где-то зарезервировано.
Я немного пошаманил и все работает. Но юзеры баги все равно найдут) Осталось проверить базу на взаимодействие с FoxPro, но это не раньше понедельника.
Спасибо за помощь
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:04  [ТС]
Как можно разбить строку
Delphi
1
AdoCommand1.CommandText := 'create table "' +SaveDialog1.FileName+'" (kod '+ComboBox1.Text+'(9), Name '+ComboBox1.Text+'(80), Test1 '+ComboBox3.Text+'(20))';
если номер ComboBox заранее не известен, они создаются динамически в цикле (ComboBox[i])?

Пытаюсь так:
Delphi
1
2
3
4
5
AdoCommand1.CommandText.Str := 'create table "' +SaveDialog1.FileName+'" (';
    for I := 2 to StrToInt(Edit1.Text)+1 do
    begin
       AdoCommand1.CommandText.Str:=str+massEd[i]+massCB[i];
    end;
но ругается на AdoCommand1.CommandText.Str

massEd и massCB - массивы Edit и ComboBox соответственно, из которых надо брать имя поля и тип.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:12
текст полученный приведите из AdoCommand1.CommandText.Str
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:19  [ТС]
Joy, какой текст? На .Str ругается.

Ошибка:
[dcc32 Error] ado12Unit1.pas(90): E2018 Record, object or class type required
[dcc32 Error] ado12Unit1.pas(90): E2008 Incompatible types
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:23
ADOQuery1.Insert;
ADOQuery1.FieldByName('kod').AsInteger:= 1;
ADOQuery1.FieldByName('name').AsString:= 'qwerty';
ADOQuery1.FieldByName('test1').AsString: ='asdfg_=+1';
А если заменить на это:
Delphi
1
2
3
Adoquery1.sql.clear;
Adoquery1.sql.add('insert into example1 (kod,name,test1) values (1,"qwerty","asdfg_=+1"');
Adoquery1.execsql;
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:25  [ТС]
Joy, куда то ты не туда полез... Смотри сообщение #8
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:29
и что как создать таблицу что-ли?

Добавлено через 3 минуты
Delphi
1
2
3
     ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Add('create table ' +SaveDialog1.FileName+'  (id int, nameuser varchar(254), dep varchar(254), DT varchar(12), nameotch varchar(254))');
     ADOQuery1.ExecSQL;
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:30  [ТС]
Joy, таблица давно создана и заполнена(спасибо Sergio Leone).
Теперь пытаюсь модифицировать прогу чтобы количество и тип полей были не зашиты в коде, а выбирались пользователем.
Для этого надо разбить строку
Цитата Сообщение от Razdolbait Посмотреть сообщение
Delphi
1
AdoCommand1.CommandText := 'create table "' +SaveDialog1.FileName+'" (kod '+ComboBox1.Text+'(9), Name '+ComboBox1.Text+'(80), Test1 '+ComboBox3.Text+'(20))';
Чтобы стала похожа на
Цитата Сообщение от Razdolbait Посмотреть сообщение
Delphi
1
2
3
4
5
AdoCommand1.CommandText.Str := 'create table "' +SaveDialog1.FileName+'" (';
for I := 2 to StrToInt(Edit1.Text)+1 do
 begin
AdoCommand1.CommandText.Str:=str+massEd[i]+massCB[i];
 end;
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:33
нормально создается

Добавлено через 3 минуты
AdoCommand1.CommandText.Str - вместо этого присвой символьной переменной и выведи сюда

Добавлено через 17 секунд
что в итоге в запросе написано
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:39  [ТС]
Joy, сформирую вопрос по другому:
Ты можешь разбить строку как мне надо(см. сообщение 8 или 14)?
Варианты ответа: Да/Нет (если вдруг да - буду благодарен за пример кода, в котором строка разбита).
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:39
дошло.
так попробуйте AdoCommand1.CommandText.Str:=str+massEd[i].text+massCB[i].text;
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:44  [ТС]
.str не работает, выдает ошибку( см. сообщение 10)
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
22.09.2014, 11:44
сейчас попробую нарисовать конструктор. 10 минут
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
22.09.2014, 11:55  [ТС]
насчет +massEd[i].text+massCB[i].Text+',' согласен, затупил)
Но проблему с .str это не решает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2014, 11:55
Помогаю со студенческими работами здесь

как создать запрос на заполнение в полей таблицы Access через delphi
как создать запрос на заполнение в полей таблицы Access через delphi, при помощи Editов

Как запаковать таблицу dbf в Delphi 4 ?
Как запаковать таблицу dbf в Delphi 4 ? Естественно программным способом. Или это невозможно

Если создать табл.в InterBase как потом работать с ними через Delphi
и с запросами тоже самое...

Как импортировать dbf таблицу в Базу Delphi 7
Нужно что бы в Delphi 7, при нажатие кнопки открыть БД открывала базу dbf из указанного места! Помогите пожалуйста, срочно нужно!

Как создать авторизацию через форму Delphi чтоб логин и пароль сохранялись в БД MS SQL?
Есть программа. Первое окно для авторизации, после авторизации откривается форма программи. как сделать чтоб логин и пароль сохранялись в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru