Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

shaman1980

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Суть - есть таблица: TMCONNAKL с полями NAKLNUM,  TMCID,  PRICE, CNT на firebird.  
есть доступ к ней в Сбилдере через FIBDataset и cxGridDBTableView.  
и есть таблица NAKLADNAYA c доступом так же. между собой они связаны так  - Накладная( поле NAKNUM) - товары (ТМСID) по накладной.  
 
связал датасет  TMCNAKLDataSet с датасетом NAKLDataSet через датасурс как детайл и в SQL прописал MAS_ префиксы на выборки.  
 
 В гриде включил навигатор, и дополнительно сделал кнопку "инсерт" с кодом  DataModule1->TMCNAKLDataSet->Insert(); тут вроде всё понятно. Далее тут же в онклик делаю  DataModule1->TMCNAKLDataSet->FBN("NAKLNUM")->Value=DataModule1->NakladDataSet->FBN("NAKNUM")->Value; - присваиваю значение полю вставленной записи (но это проверялось и комментилось).  
 
Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.  
 
 
Сделал проверку на состояние датасета и если он в эдит или инсерт - делаю post.
 
 
т.е. вставку как бы делает, а потом при попытке еще раз добавить товар  - предидущая запись исчезает!!! Такое впечатление, что срабатывает роллбек. Я ВЕШАЮСЬ. честно.
ЧТО стандартный "+" из навигатора делает, чего не делаю я ???

Всего записей: 5 | Зарегистр. 01-06-2011 | Отправлено: 11:11 01-06-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.  

 
А Firebird тут при чем?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:45 01-06-2011
shaman1980

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А это у модератора спросите я в прикладном написал вопрос - он меня послал сюда - есть тема по ибейз и файрберд типа иди туда  
А я правила читал - с модерами не спорю

Всего записей: 5 | Зарегистр. 01-06-2011 | Отправлено: 12:17 01-06-2011 | Исправлено: shaman1980, 12:18 01-06-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
неправильно вопрос задал ты
 
я повторяю - в твоём вопросе идет речь про FB - при чём здесь FB, У ТЕБЯ ПРОЛЕМА с билдером,

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:38 01-06-2011
shaman1980

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ВОПРОС к админу!!!! - у мну про ФБ одно упоминание - в начале, про всяк случай. тема моя БЫЛА в другом разделе. А тему вообще там называл "проблема вставки в датасет" ю проблема даже не с билдером. КТО может сказать последовательность работы кнопки+ в навигаторе ДБГРИДА? думаю они одинакы для сх компонент и обычных. там не просто ИНСЕРТ, а еще наверняка проверки и посты, и пр.

Всего записей: 5 | Зарегистр. 01-06-2011 | Отправлено: 12:45 01-06-2011 | Исправлено: shaman1980, 12:48 01-06-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здесь больше вопрос по SQL, а не по кнопке +
 
у тебя ПРИВИЛЬНО заполнены в датасете свойства AutoUpdateOptions?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 13:09 01-06-2011
shaman1980

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
НЕ работает - расшифровіваю - ошибок не выбивает , иначе я бы привёл их. Если я делаю инсерт с помощью кнопки "+" на навигаторе грида вообще все прекрасно - записи добавляются. Код Моей кнопки я привёл , но он создает запись, потом делаешь ещё раз и предыдущая стираетсяи так до бесконечности.  
При этом дбнавигатор продолжает нормально работать и добавляет записи.
 
 
по настройкам Autoparamstofields - true
GenertorName - задан генератор GEN_TMCONNAKL
Keyfield - IDTMCONNAKL
updateTable - TMCONNAKL
WhenGetGen - OnNewRecord
CashedUpdates -true
остальное фальш
 

Код:
 
Селект
SELECT
 IDTMCNAKL, NAKLNUM, TMCID, PRICE, CNT       FROM
 TMCONNAKL  
Where NAKLNUM=:MAS_NAKNUM;
 
инсерт
 
INSERT INTO TMCONNAKL(
 IDTMCNAKL,    NAKLNUM,        TMCID,  PRICE,  CNT )
VALUES(
 :IDTMCNAKL,  :MAS_NAKNUM,  :TMCID, :PRICE, :CNT )
 
РЕфреш
 
SELECT
 IDTMCNAKL,  NAKLNUM,  TMCID,  PRICE,  CNT     FROM
 TMCONNAKL  
Where(  NAKLNUM=:MAS_NAKNUM
 ) and (  TMCONNAKL.IDTMCNAKL = :OLD_IDTMCNAKL
 and TMCONNAKL.NAKLNUM = :OLD_NAKLNUM
 and TMCONNAKL.TMCID = :OLD_TMCID
 and TMCONNAKL.PRICE = :OLD_PRICE
 and TMCONNAKL.CNT = :OLD_CNT
 );
 

 
Пошёл курить код весь заново.

Всего записей: 5 | Зарегистр. 01-06-2011 | Отправлено: 15:47 01-06-2011 | Исправлено: shaman1980, 16:32 01-06-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Научись задавать вопросы, прошу в который раз.
 
1.
 
Цитата:
Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.  

 
подожди немного телепатов и они отгадают, что значит "нет". Заодно отгадают и текст ошибки и всё остальное.
 
 
2.  
Повторяю в который раз, если проблемы с Firebird НЕТ, то зачем ты пишешь в этот раздел?
 
 
3.  
Зачем CashedUpdates -true и Autoparamstofields - true?
 
4. Отредактируй последнее сообщение и отключи переключатель "Разрешить смайлики"
 
Добавлено:
5. Для кода используй кнопку "Программный код", незачем его выделять огромным жирным шрифтом.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:12 01-06-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ, есть поле типа int в файребирдовской таблице, как правильно составить запрос для выборки через параметр всех значений и одного конкретного, вариант как для строк чет не получается
select pole1 from table1 where pole1 like aram1
param1='%' or param1='aaaaa%'

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 11:09 14-07-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вариант как для строк

для начала нужно привести число к строке с помощью CAST
 
Добавлено:
Что-то вроде этого:
 

Код:
select pole1 from table1 where cast(pole1 as varchar(100)) like aram1


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:17 14-07-2011
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol

Цитата:
есть поле типа int

Цитата:
where pole1 like aram1

Цитата:
param1='aaaaa%'

Каким образом целое будет равно aaaaa% ?
 

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 03:35 15-07-2011
vkramnik



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shaman1980
Коллега, вот рабочий пример вставки записи о клиенте в одну из моих FB-баз :

Код:
 
void __fastcall TDMPrihRash::DMClientsAdd (
            AnsiString    zFIO,        // Clients_FIO
            AnsiString    zLevel,      // Clients_Level
            AnsiString    zIDB,        // Clients_IDB
            AnsiString    zContr,      // Clients_Contract
            AnsiString    zDate,      // Clients_Date
            AnsiString    zPhone,    // Clients_Phone
            AnsiString    zDDate,    // Clients_DiscDate
            AnsiString    zDBase,    // Clients_DiscBase
            AnsiString    zComm     // Clients_Comment
            )
{
AnsiString    txtInsClientsSQL =    "INSERT INTO\n"
                        "CLIENTS\n"
                        "    (\n"
                        "    CLIENTS_FIO,\n"
                        "    CLIENTS_LEVEL,\n"
                        "    CLIENTS_IDB,\n"
                        "    CLIENTS_CONTRACT,\n"
                        "    CLIENTS_DATE,\n"
                        "    CLIENTS_PHONE,\n"
                        "    CLIENTS_DISCDATE,\n"
                        "    CLIENTS_DISCBASE,\n"
                        "    CLIENTS_COMMENT\n"
                        "    )\n"
                        "VALUES\n"
                        "(\n" ;
 
    zFIO        = "\'" + zFIO + "\',\n" ;      // Clients_FIO
    zLevel    = zLevel + ",\n" ;               // Clients_Level
    zIDB        = zIDB + ",\n" ;                // Clients_IDB
    zContr    = zContr + ",\n" ;               // Clients_Contract
    zDate    = "\'" + zDate + "\',\n" ;       // Clients_Date
    zPhone    = "\'" + zPhone + "\',\n" ;   // Clients_Phone
    zDDate    = "\'" + zDDate + "\',\n" ;  // Clients_DiscDate
    zDBase    = zDBase + ",\n" ;            // Clients_DiscBase
    zComm    = "\'" + zComm + "\'\n" ;   // Clients_Comment
 
    txtInsClientsSQL += zFIO + zLevel + zIDB + zContr + zDate
              + zPhone + zDDate + zDBase + zComm + ")" ;
 
//***    ShowMessage( txtInsClientsSQL );
 
    pFIBQueryClientsAdd->BeginModifySQLText();
    pFIBQueryClientsAdd->SQL->Text = txtInsClientsSQL ;
    pFIBQueryClientsAdd->EndModifySQLText();
    pFIBQueryClientsAdd->ExecQuery();
}

Как нетрудно догадаться, pFIBQueryClientsAdd - FIBPlus-компонента "Запрос".
Я обычно явным образом формирую текст любого запроса в виде строки,
а потом пихаю его в компоненту и вызываю запрос на выполнение...
Таких запросов (Insert, Select, Delete, Modify) у меня не один десяток...
Каждый вид запроса к конкретной "тематической" таблице оформляю
пусть маленькой, но отдельной подпрограммкой - отлаживаться проще
Удачи!

Всего записей: 1848 | Зарегистр. 14-12-2005 | Отправлено: 08:24 15-07-2011 | Исправлено: vkramnik, 08:30 15-07-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В продолжение темы о FireBird Embeded + CD Disk. Напомню что проблемма в том, что когда достать диск, то после этого выключить программу абсолютно невозможно...
 
У меня понемногу наросла своя база данных, не в смысле своя структура, а в смысле не FB не ADO не парадокс с акцессом, а свой формат файла, и компоненты доступа к нему. Я перекинул таблицу с файлами в свою ДБ. А таблицы необходимые калькулятору, там сложненький SQL я оставил FireBird-у. После этого у программы следующие особенности:
 
1. Внутренние файлы-блобы стали просто летать, таких скоростей я просто не видывал.
2. Если достать диск и попробовать обращения к моей ДБ - высвечивается та же самая ошибка что и раньше, но программа закрывается с первого нажатия на крестик close.
3. Если попользоваться калькулятором обращение к FireBird, которое потом сразу закрывает коннект после расчёта, то программа так же легко закрывается.
4. Если достать CD Disk и попробовать использовать калькулятор, которы всего навсего не может законнектится и вылетает, то после этого программу так же не убить ничем.
 
Отсюда следует - причина этого только в FireBird. 100%
 
Добавлено:
и
5. Если вставить диск обратно, то программу можно всётаки убить. (но нужно ещё догадаться)

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:46 28-07-2011 | Исправлено: delover, 15:51 28-07-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати люблю хвастаться. Файлы-блобы это таблица филес, типа Nornon Кэш. Интернет эксплорер выплюхивает огромную страницу с кучей картинок за 0.1 секунды. Такого я не видел ещё. Правда файлы приходится отдавать в эксплорер минуя диск.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:53 02-08-2011
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
Если вставить диск обратно, то программу можно всётаки убить. (но нужно ещё догадаться)

Цитата:
Отсюда следует - причина этого только в FireBird. 100%

 
В FIB есть обработка потери коннекта. Все давно уже написано изадокументировано. Причина не в FB а в руках.

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 02:00 03-08-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR

Цитата:
В FIB есть обработка потери коннекта.

Опять поперёк читаем?  
1) Не FIBPlus а FireBird на стандартных IB компонентах.
2) Какая обработка потери коннекта? Вы о чём? !!! Коннекта ещё не было !!! Пытались открыть базу на пустом CD устройстве...  
3) Писал уже выше. - Убираю диск нижимаю крестик ни Halt ни Kill Process не работают. Выхожу из сессии виндовс на меню смены пользователя, завершаю сессию, потом захожу снова - в процессах болтается неубитое тело программы.
 

Цитата:
Причина не в FB а в руках.

Чтобы цитировать известные фразы неплохо бы научится просто читать а не по диагонали.
 

Цитата:
Кстати люблю хвастаться.

Пытаюсь открыть табличку IB компонентом - оут оф мемори. делаю Unidirectional и сливаю в свой датасет. Количество данных - 52 мегобайт, около 94 тысяч записей. Цепляю датасет к гриду и запускаю программу снова.  
Датасет открывается за 00:00:00 сек 875 миллисекунд
Наверно у меня руки кривые учитывая что данные ещё и шифрануты.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:39 03-08-2011 | Исправлено: delover, 16:42 03-08-2011
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
delover

Цитата:
делаю Unidirectional и сливаю в свой датасет

а что за датасет то используешь? не подумай плохого, просто интересно )

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 16:53 03-08-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR

Цитата:
а что за датасет  

Ну не датасет, а просто таблица. ) Компонента дадасета свой. Еcли быть точным - у меня массив вариантов (немного ускоренный в области массивов). Называется тип TvTable.
 
Ненаю чё случилось, похоже антивирус апдейтился или Винда, но больше вообще не зависает и про ошибку не говорит. Больше похоже что ФаерБёрд непричём.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:24 03-08-2011 | Исправлено: delover, 20:26 03-08-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Забыл добавить - может типо этого есть хорошо -

Код:
 
  DM.IBDatabase1.Connected := true;
  try
    list := NCalc(idgroup, mass);
  finally
    DM.IBDatabase1.Connected := false;
  end;
 

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 08:04 04-08-2011
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
Компонента дадасета свой.

Я бы использовал какой нибудь memotable. Писать и так есть что ). К тому же варианты ИМХО очень медленно обрабатываются.

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 15:17 04-08-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru