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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
а не проще ли было бы базу разместить в c:\database\ и права выдать на папку, чем на весь диск

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 15:31 10-01-2014
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004
Так веть люди разные, бывают те кто например привык на диске в корне хранить. Например пожилые, те кто ещё к DOS привык. Ну и под старость бывает сложно вспомнить где, что почему и как. Если так надо, кому то,  то просто любопытно.
 
А можно я прощения попрошу? Ну очень хочется. Тоже интересно, а можно ли сделать так чтобы IBExpert, когда бэкап делаешь запоминал кодировку, ведь это каждый раз ручками приходится вводить, когда переходишь с полторашки.  

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 18:26 10-01-2014 | Исправлено: delover, 18:58 11-01-2014
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне кажется, что можно и без прав админа, подключиться к базе. Нам же не привиделось - ставим local не работает, а tcp работает. Думаете я знаю что такое файловая система? Видимо как с join, - потому как может быть null, потому и алгоритмы разные.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:05 11-01-2014 | Исправлено: delover, 04:07 12-01-2014
ant0ni02004

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

Цитата:
ставим local не работает, а tcp работает

ну так если соединяться с БД через tcp - то идёт обращение к службе. а служба, как правило, запускается системой с правами системы (что обычно больше, чем админские)

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 16:08 12-01-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004
Локальное соединение подразумевает, что Вы может быть хотите "встроенный сервер", то есть embeded. Это действительная практика сервера, работающего без установки FireBird. Очень хорошо, что Вы правильно определили суть ошибки. Хорошо бы все понимали это обстоятельство.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 08:37 17-01-2014 | Исправлено: xpin2013, 09:06 17-01-2014
vetal71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем доброго времени суток. firebird 2.5.
пишу хранимую процедуру. в теле процедуры конструкция for select ... from ... where ... do. В зависимости от передаваемого параметра (варианта расчета) в конструкции меняется условие where. Вопрос в том, как реализовать выборку без переписывания for select... n-го количества раз.

Всего записей: 299 | Зарегистр. 08-09-2008 | Отправлено: 09:43 22-01-2014
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vetal71
Зависит от того, что вы пишете в where. В некоторых случаях помогают конструкции типа - where x=iif(:par=1,y,z)
Либо формирование запроса динамически и execute statement.  

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 12:29 22-01-2014
vetal71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exteris
нет. в моем случае так не прокатит.
if (par=1) then
  where a=:a and b=:b;
if (par=2) then
  where b=:b and c=:c;
... примерно так.

Всего записей: 299 | Зарегистр. 08-09-2008 | Отправлено: 13:03 22-01-2014
Coltrain

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vetal71
where ((:param = 1) and (<все условия предиката для знач. пар. = 1>))
  or ((:param = 2) and (<все условия предиката для знач. пар. = 2>))
...
  or ((:param = n) and (<все условия предиката для знач. пар. = n>))
 
подойдет?

Всего записей: 160 | Зарегистр. 31-07-2002 | Отправлено: 16:12 22-01-2014
vetal71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Coltrain
спасибо за совет. надо попробовать.

Всего записей: 299 | Зарегистр. 08-09-2008 | Отправлено: 16:35 22-01-2014
vetal71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exteris
Coltrain
решил задачу используя конструкцию  
for execute statement <statement> into ... do
всем спасибо

Всего записей: 299 | Зарегистр. 08-09-2008 | Отправлено: 22:54 22-01-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья! Направьте на путь истинный. Как в ibase делаются несколько запросов? Делаю Insert и следом update. Первый отрабатывает, второй нет. Строка сформирована правильно (если закомментить первый запрос, то второй отрабатывает). Подозреваю, что я просто не знаю порядок действий. Изучаю методом тыка, уж звиняйте, если вопрос слишком тупой.
 

Код:
$stmt = 'INSERT INTO CLIENT_CATALOG (ITEM_ID,ITEM_NAME,ITEM_CONTACTS,ITEM_DATA,ITEM_CONTACT_NAME,ITEM_CONTACT_PROFESSION,ITEM_KOMPLEKT,ITEM_DATA_NEXT,ITEM_KOMM
 VALUES (GEN_ID(id_gen,1),\''.$_POST['company'].'\',\''.$_POST['tel'].'\',\''.date("Y-m-d H:i:s").'\',\''.$_POST['fio'].'\',\''.$_POST['proff'].'\',\''.$cmpl.'
 $_POST['commtext'].'\',\''.$otv.'\','.$_POST['status'].','.$tip.')';
 
$result = ibase_query($res, $stmt) or die(ibase_errmsg());
 
$stmt = 'UPDATE CLIENT_CATALOG SET ITEM_STATUS = \'1\' WHERE ITEM_ID = \''.$_POST['tag'].'\'';
 
$result = ibase_query($res, $stmt) or die(ibase_errmsg());

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 20:49 07-02-2014
noisy

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

Код:
$tr = ibase_trans(IBASE_WRITE || IBASE_NOWAIT, $res);
 
$stmt = 'INSERT INTO CLIENT_CATALOG (ITEM_ID,ITEM_NAME,ITEM_CONTACTS,ITEM_DATA,ITEM_CONTACT_NAME,ITEM_CONTACT_PROFESSION,ITEM_KOMPLEKT,ITEM_DATA_NEXT,ITEM_KOMM
 VALUES (GEN_ID(id_gen,1),\''.$_POST['company'].'\',\''.$_POST['tel'].'\',\''.date("Y-m-d H:i:s").'\',\''.$_POST['fio'].'\',\''.$_POST['proff'].'\',\''.$cmpl.'
 $_POST['commtext'].'\',\''.$otv.'\','.$_POST['status'].','.$tip.')';
 
$result = ibase_query($tr, $stmt);
if ($result)
    ibase_commit($tr);
else {
    ibase_errmsg();
    ibase_rollback($tr);
}
 
 
$tr = ibase_trans(IBASE_WRITE || IBASE_NOWAIT, $res);
$stmt = 'UPDATE CLIENT_CATALOG SET ITEM_STATUS = \'1\' WHERE ITEM_ID = \''.$_POST['tag'].'\'';
 
$result = ibase_query($tr, $stmt);
if ($result)
    ibase_commit($tr);
else {
    ibase_errmsg();
    ibase_rollback($tr);
}
 

 
Я бы рекомендовал использовать связку  
ibase_prepare - ibase_execute

Всего записей: 986 | Зарегистр. 30-05-2002 | Отправлено: 21:18 07-02-2014 | Исправлено: noisy, 21:19 07-02-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Итить! Работает!
 
Благодарю! Буду морщить лоб и напрягать осознание, чтобы разобраться в причинах.
 
noisy

Цитата:
ibase_prepare - ibase_execute

Тут ведь вот какое дело. Какой пример первый попался, тот и пришлось использовать. А тепер на каждой страничке читаю такой же совет. Видимо, надо прислушаться. Попробую. Мне б ещё примеров помясисьтее, а то в документации такие куцые

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 21:53 07-02-2014
noisy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у PHP  плохо организовано управление транзакциями IB/FB по умолчанию,  
поэтому совет при работе ставить свои транзакции на чтение и обновление
для себя сделал такой класс для работы с FB  
Подробнее...

Всего записей: 986 | Зарегистр. 30-05-2002 | Отправлено: 22:38 07-02-2014
Maximus777

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

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 22:58 07-02-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подсобите ещё с одной задачей. В таблице есть поле "Телефон". Заполнено, как звёзды встанут. С пробелами, с дефисами. Чтобы организовать поиск по телефону, добавляю в таблицу ещё одно поле. Теперь надо взять инфу с первого поля, очистить её от пробелов и дефисов (оставив только цифры и запятые) и прописать в новое поле. Хотелось бы как-то с одного раза всех зайцев ухлопать.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 14:25 10-02-2014
noisy

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

Всего записей: 986 | Зарегистр. 30-05-2002 | Отправлено: 15:08 10-02-2014 | Исправлено: noisy, 15:11 10-02-2014
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
У меня в Rfunc добавлено
 
char* EXPORT fn_extract_phone(ARG(char*, s))
ARGLIST(char *s)
{
    unsigned char *f = s;
    unsigned char *c = s;
 
    while(*c) {
        if(isdigit(*c)) *f++=*c;
        c++;
      }
      *f = '\0';
    return s;
}

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 01:28 11-02-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ответы. Вопрос дублирования и очистки продублированного поля решил врукопашную. Несколько запросов типа:
 

Код:
update CLIENT_CATALOG set item_clear_phone = REPLACE(item_clear_phone, '-', '');

 
и дело было сделано.
 
fn_extract_phone обязательно возьму на вооружение. Ибо в будущем точно пригодится.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 21:51 11-02-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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