Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
#1

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

18.09.2014, 09:37. Просмотров 3008. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 09:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как создать DBF через Delphi (программно)? (Delphi БД):

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

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

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

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

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

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

23
Sergio Leone
2462 / 1107 / 579
Регистрация: 07.06.2014
Сообщений: 3,259
18.09.2014, 11:26 #2
Лучший ответ Сообщение было отмечено Razdolbait как решение

Решение

состряпал примерчик...
просто создание DBF
1
Вложения
Тип файла: rar ado12Project1.rar (272.6 Кб, 120 просмотров)
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
18.09.2014, 12:11  [ТС] #3
Именно то что нужно! Спасибо)
Но при попытке заполнить эту таблицу выскакивает ошибка "Недостаточно сведений из базовой таблицы для обновления" (при сохранении записи в DBNavigator). Да и через запросы не получается.Project1.rar
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
18.09.2014, 12:20  [ТС] #4
С помощью DBFViewer изменения вносятся, в моей программе отображаются
0
Sergio Leone
2462 / 1107 / 579
Регистрация: 07.06.2014
Сообщений: 3,259
18.09.2014, 13:26 #5
Razdolbait,
попробуй изменить место размещения курсора в ADOQUery1 на CursorLocation = clUseServer
Как создать DBF через Delphi (программно)?
только не спрашивай меня, что это и для чего нужно! я нагуглил. понятия не имею, для чего это!

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

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


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

попробуй изменить его на любое другое (TSTNAME, например) и проверить работу...
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
18.09.2014, 15:53  [ТС] #7
Сомневаюсь что поле name в чем-то виновато. Имя поля довольно актуально, не думаю что оно где-то зарезервировано.
Я немного пошаманил и все работает. Но юзеры баги все равно найдут) Осталось проверить базу на взаимодействие с FoxPro, но это не раньше понедельника.
Спасибо за помощь
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:04  [ТС] #8
Как можно разбить строку
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
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:12 #9
текст полученный приведите из AdoCommand1.CommandText.Str
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:19  [ТС] #10
Joy, какой текст? На .Str ругается.

Ошибка:
[dcc32 Error] ado12Unit1.pas(90): E2018 Record, object or class type required
[dcc32 Error] ado12Unit1.pas(90): E2008 Incompatible types
0
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:23 #11
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
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:25  [ТС] #12
Joy, куда то ты не туда полез... Смотри сообщение #8
0
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:29 #13
и что как создать таблицу что-ли?

Добавлено через 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
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:30  [ТС] #14
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
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:33 #15
нормально создается

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

Добавлено через 17 секунд
что в итоге в запросе написано
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:39  [ТС] #16
Joy, сформирую вопрос по другому:
Ты можешь разбить строку как мне надо(см. сообщение 8 или 14)?
Варианты ответа: Да/Нет (если вдруг да - буду благодарен за пример кода, в котором строка разбита).
0
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:39 #17
дошло.
так попробуйте AdoCommand1.CommandText.Str:=str+massEd[i].text+massCB[i].text;
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:44  [ТС] #18
.str не работает, выдает ошибку( см. сообщение 10)
0
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
22.09.2014, 11:44 #19
сейчас попробую нарисовать конструктор. 10 минут
0
Razdolbait
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 213
22.09.2014, 11:55  [ТС] #20
насчет +massEd[i].text+massCB[i].Text+',' согласен, затупил)
Но проблему с .str это не решает
0
22.09.2014, 11:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2014, 11:55
Привет! Вот еще темы с решениями:

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

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

Программно создать таблицу в аксессе через делфи
ЗДравствуйте, подскажите как создать таблицу в бд в аксессе через делфи?...

Как SQL-ем создать DBF таблицу?
Подскажите пожалуйста, можно ли SQL-ем создать DBF таблицу? Заранее...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru