Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 18:56   #1
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию Несколько вопросов по FIBplus компонентам

Привет всем.
Решил тут перевести одну БД под Firebird. Скачал и установил FIB+ под Delphi 7. После установки в среде Delphi появились 2 новых вкладки (FIBPlus и FIBPlusServices). Создал базу BASE.fdb пока с двумя табличками. Создал в Delphi пробный проект. Положил на форму следующие компоненты:

1. pFIBDatabase1
2. pFIBQuery1
3. DBGridEh

В pFIBDatabase1 прописал путь к базе данных, пользователя и пароль, затем подключился.
В pFIBQuery1 прописал запрос для выбора всех записей из таблицы и вот тут проблема. Как связать DBGridEh и эти компоненты. Пробовал через DataSource (как всегда раньше делал с другими БД), но безуспешно.
Подскажите пожалуйста что мне дальше делать? Только прошу сильно не пинать, так как с Firebird я только начал разбираться.
Заранее премного благодарен.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума
Старый 13.10.2011, 20:11   #2
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

20:11
query и database на той же форме или в datamodule?
20:24
вместо fibquery используйте fibdataset. тогда стандартный datasource примет его
и обязательно хоть один fibtransaction (ну и естественно его настроить)

Пора бы уже и прочесть правила раздела...
А пока - штраф за флуд, за нежелание эти правила соблюдать.

Последний раз редактировалось mihali4; 17.10.2011 в 00:21.
Dush вне форума
Старый 13.10.2011, 20:40   #3
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Вот. Спасибо большое. Все получилось. А теперь еще один вопрос. Я создаю таблицы в БД с помощью утилиты IBExpert, так вот, при импорте таблицы из фалов DBF (причем пробовал и через Эксель и Эксэс) почему то формат DATE, становится VARCHAR, и не удается его изменить (выдает ошибку). Как быть в этом случае? Можно ли там как то поменять формат безболезненно и без потерь?
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось mihali4; 17.10.2011 в 11:45.
Vit@L вне форума
Старый 13.10.2011, 22:56   #4
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

при импорте в окне есть закладки. Вам нужна закладка Columns/Mapping. в ней выставляются типы полей до импорта. вот там и укажите нужные вам типы
только все типы прийдется вводить руками, так что если точно не помните как пишется тот или иной тип - перепишите его куда нить

ну а чтоб изменить тип поля нужно: создать дополнительное поле, в него скопировать все данные из поля, тип которого нужно изменить, удалить старое поле, создать его по новой с нужным типом, скопировать данные из временного поля с приведением типа, удалить временное поле.

пример:
Код:
Alter table Test add tmp_field varchar(30);
update test set tmp_field=source_field;
alter table test drop sorce_field;
alter table test add source_field date;
update test set source_field=CAST (tmp_field as date);
alter table test drop tmp_field;

Последний раз редактировалось mihali4; 17.10.2011 в 11:45. Причина: Добавление
Dush вне форума
Старый 15.10.2011, 16:39   #5
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

ОК, спасибо огромное, теперь подскажите пожалуйста. Есть ли в Firebird тип данных подобный типу "Счетчик" в базе Access или еще в некоторых он называется AUTOINCREMENT?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума
Старый 15.10.2011, 23:51   #6
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

как такого типа autoincrement нет. счетчики определяются любым целым типом и созданием генератора. вдобавок можно еще создать триггер который будет увеличивать на определенное значение ваш индекс. в IBExpert при создании таблицы установите галочку в поле AutoInc и в появившемся окне создайте генератор и триггер.
Dush вне форума
Старый 16.10.2011, 07:41   #7
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

07:41
Цитата:
Сообщение от Dush Посмотреть сообщение
как такого типа autoincrement нет. счетчики определяются любым целым типом и созданием генератора. вдобавок можно еще создать триггер который будет увеличивать на определенное значение ваш индекс. в IBExpert при создании таблицы установите галочку в поле AutoInc и в появившемся окне создайте генератор и триггер.
Все понял, спасибо. А вот еще вопрос. Можно ли для автоинкремента создать только генератор, без триггера?
08:47
Вот еще столкнулся с такой проблемой. До этого БД была AbsoluteDB. Сейчас меняю все компоненты в программе на FIB+ ну и соответственно немного переделываю код. Но возникают следующие ошибки на картинках.
В чем может быть проблема?

Запрос пишу такого плана:

Код:
procedure TForm1.FormCreate(Sender: TObject);
   begin
      pFIBDataSet1.SQLs.SelectSQL.Clear;
      pFIBDataSet1.SQLs.SelectSQL.Add('select * from PROEKTY');
      pFIBDataSet1.Active:=true;
   end;
Пора бы уже и прочесть правила раздела...
А пока - штраф за флуд, за нежелание эти правила соблюдать.
Изображения
Тип файла: jpg 1.jpg (27.4 Кб, 49 просмотров)
Тип файла: jpg 2.jpg (25.6 Кб, 45 просмотров)
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось mihali4; 17.10.2011 в 00:26.
Vit@L вне форума
Старый 16.10.2011, 09:02   #8
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Vit@L Посмотреть сообщение
Все понял, спасибо. А вот еще вопрос. Можно ли для автоинкремента создать только генератор, без триггера?
А зачем? В триггере и перещелкивается генератор и забирается из него новое значение, и можно еще что-нить сделать.
Можно но это не автоинкремент будет.
Цитата:
Сообщение от Vit@L Посмотреть сообщение
Вот еще столкнулся с такой проблемой. До этого БД была AbsoluteDB. Сейчас меняю все компоненты в программе на FIB+ ну и соответственно немного переделываю код. Но возникают следующие ошибки на картинках.
В чем может быть проблема?

Запрос пишу такого плана:

Код:
procedure TForm1.FormCreate(Sender: TObject);
   begin
      pFIBDataSet1.SQLs.SelectSQL.Clear;
      pFIBDataSet1.SQLs.SelectSQL.Add('select * from PROEKTY');
      pFIBDataSet1.Active:=true;
   end;
В первой ошибке сказано что набор данных открыт и нельзя менять ему текст запроса. Так что сначала Close надо выполнить.
А второй не может обновить набор данных. Почему непонятно.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума
Старый 16.10.2011, 20:14   #9
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

ОК, спасибо большое. Теперь перед изменением запроса сначала закрываю датасет.
Но есть другая проблема. Подскажите мне надо к примеру выбрать записи из таблицы за определенный период, как это сделать?
Делаю так:
Код:
adojobsh.SQLs.SelectSQL.Add('select * from JOURNAL_OBSH where DATA between "'+datetostr(startoftheyear(Now))+'" and "'+datetostr(endoftheyear(Now))+'" order by DATA, VREMYA');
Не работает. Выдает ошибку типа '01.01.2011' неизвестная колонка. Как быть?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума
Старый 17.10.2011, 10:52   #10
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Выглядит логично но дату надо передавать как строковое значение- т.е. в обрамлении апострофов. Предлагаю не париться и вместо конструкций типа
Код:
+'" and "'+
, где легко ошибиться использовать вполне штатную функцию
Код:
QuotedStr(STRING)
. Она ЕМНИП специально для этого и существует.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько вопросов по C Horus92 Общие вопросы C/C++ 2 15.11.2009 16:08
БД - Несколько вопросов lutdan БД в Delphi 3 11.10.2009 20:22
несколько вопросов fitc Общие вопросы Delphi 28 14.07.2009 21:20
Несколько Вопросов Дорст Общие вопросы Delphi 3 12.11.2007 09:18