-
Добрый день, если готовая программа, написанная на Delphi 7. В ней есть один кривой SQL запрос, который хочется поправить. Текст этого запроса задается не в ресурсах, а присваивается во время выполнения. Это известно, т.к. есть исходный код модуля, где это делается. И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (
Вопрос, есть ли простой путь заменить эту строку?
PS. Запрос для mysql 4, хранимых процедур нет, view-шек нет :(.
Пересобрать программу/обратиться к разработчику - не вариант. Пожалуйста, просто примите это.
-
> Пересобрать программу/обратиться к разработчику
Единственный вариант.
-
Найти в асм-коде, где эта строка присваивается и поменять адрес присваиваемой строки. Саму строку положить в другое место, где она поместится.
-
И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (
создать вьюху, в которой часть запроса укорачивается и правится косяк. имя вьюхи подогнать под старый размер
-
если будет слишком коротко, то добить каментами
-
... если не получится, нанять программиста
-
> iop © (27.05.16 13:01) [3] > > И самое страшное: исправленный запрос длиннее исходного. > Укоротить ну не получится никак ( > > создать вьюху, в которой часть запроса укорачивается и правится > косяк.
Кстати, классная мысль.
-
Для кого автор пишет:
> PS. Запрос для mysql 4, хранимых процедур нет, view-шек нет :(.
-
> iop © (27.05.16 13:02) [4] > если будет слишком коротко, то добить каментами
Пробелы ничем не хуже.
-
делали мы такое на прошлой работе. Открывали exe каким-то hex-редактором, заменяли запрос. Только вот по длине новые запросы были короче старых, и их дополняли пробелами. А для случая, когда новый запрос длиннее - то должно помочь
> создать вьюху, в которой часть запроса укорачивается
-
> Для кого автор пишет: > > > PS. Запрос для mysql 4, хранимых процедур нет, view-шек > нет :(.
Блин, я это проигнорировал :о)
-
тогда нанять шестиклассника (у них уже каникулы) который перенесет программистам базу на пятый мускул.
-
Эта программа такой дремучий муровейник, который нельзя трогать - ни дай бог что случится. И версия установлена старая. Собранная из исходников версия не работает с этой базой, потому что новая. Как автор этого творения обновлял ее одному ему известно. Возможно что никак или держал версию исходников.
-
пересобирать нельзя, сервер менять нельзя, ничего нельзя....
а на форуме-то про программу спрашивать вообще можно было? может так и было предназначено судьбой жить с этой болью?
-
А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п. Трэш конечно, но если все остальное нельзя? :)
-
> Kerk © (27.05.16 15:06) [14]
если переименовывать поля и таблицы, то править скорее всего придется не только нужный запрос, а и все остальные...
> DayGaykin © (27.05.16 12:39)
а запрос нельзя как-нить написать по другому, чтобы он влез на место старого?
-
> Kerk © (27.05.16 15:06) [14] > А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п.
А ведь идея в самом деле хороша. Правда не понятно что в результате отвиснет (где-то имя таблицы формируется вдруг динамически, потому не будет замечено при замене), но хотя бы луч света )
-
> KSergey © (27.05.16 17:07) [16]
А как я в EXE файле пойму это имя таблицы или просто встретилось. Вот так есть:
qryExecute(qryCol, 'SELECT DISTINCT a.id, a.name FROM stat a, tmp_tarif_cena b, tmp_service s' + 'WHERE a.id=b.id_stat AND b.id = s.id_cena ORDER BY 1 ', True);
Вот так надо:
qryExecute(qryCol, 'SELECT DISTINCT a.id, a.name FROM stat a, tmp_tarif_cena b ' + 'WHERE a.id=b.id_stat AND b.id IN (SELECT id_cena FROM tmp_service UNION SELECT id_cena FROM tmp_shet) ORDER BY 1', True);
Да, tmp_* - это временные таблицы, созданные в этой функции и они убиваются при выходе.
Программа у клиента сильно старой версии. Новые версии не могут работать с той базой (выкидывают ошибки, а мест, где это может произойти, в программе очень много) Автор программы не предусмотрел нормального обновление и одному ему известно как это делать. Если пересоберу, то могу огрести новых ошибок. Если что-то изменю в базе - так же. Мы даже версию БД боимся менять, да и ничем это не поможет. Моя задача поддерживать эту программу, пока мы не отладим как следует новую (а это еще год минимум).
-
Патч экзешника рассматривается?
-
В теории: 1) докрутить нужный ресурс ресурс-хаком или чем другим, запомнив нужное смещение 2) посмотреть/найти идой или чем другим откуда ссылки на старую строку 3) подредактировать экзе, учитывая смещение новой строки
-
> Моя задача поддерживать эту программу, пока мы не отладим > как следует новую (а это еще год минимум).
Наймите нормального менеджера для общения с клиентами, который в состоянии объяснить клиенту, что поддержка глубоко старых версий не подразумевает внесение в них каких-либо изменений.
-
Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос, что денюжка платится, а программа не работается ))
-
> NoUser © (27.05.16 23:38) [21] > Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос, > что денюжка платится, а программа не работается ))
Это очень легко - несоблюдение технических требований для запуска продукта :)
Расскажу махонькою историю: Вот есть у нас пользователи, жадные до жути - весь мозг техподдержке вынесли своими хотелками, которые наш техотдел должен (а техотдел всегда периодически кому-то должен) реализовать (не важно что - главное чтобы программисты были заняты) но что-то должен реализовать, причем вчера.
И вот пользователь говорит - "ваша программа не работает!!!"
Заметьте - он не говорит, что программа работает не правильно. Он говорит - не работает и баста.
Спрашиваем: - а что случилось? - я закрыла программу и ничего не сохранилось - а при закрытии диалог при сохранении был? - да, был - что вы сделали? - ну щелкнула там - куда именно? На "Да, сохранить" или на "Нет, не сохранять" или на "Отмена"? - на "Нет не сохранять" - эмм... А что вы от нас хотите? - НУ ТАК ОНО_ЖЕ НЕ СОХРАНИЛОСЬ!!!
-
> NoUser © (27.05.16 23:38) [21] > > Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос, > что денюжка платится, а программа не работается ))
Пока не было нигде автором сказано, что пользователь постоянно платит деньги за поддержку.
-
> Rouse_ © (27.05.16 23:59) [22]
такие вещи за пределы службы поддержки вообще не должны выходить. не дай бог если у власти окажется товарищ, который скажет, что нужно прислушаться к этой женщине и каким-то образом поменять UI и юзабилити, чтобы было, как у Эппла, понятно каждой блондинке и все работало автоматически. тут можно вешаться, для корпоративного софта это смерть )
в саппорт вообще много графоманов пишет, добрая треть. любители поговорить по телефону - это вообще жэсть, там 4/5 несусветная чушь. не отключаем саппорт по телефону только по той причине, что оставшиеся 1/5, зачастую, крупные и серьезные клиенты.
:-)
-
> Eraser © (28.05.16 01:06) [24] > > > > Rouse_ © (27.05.16 23:59) [22] > > такие вещи за пределы службы поддержки вообще не должны > выходить.
Вообще-то должны выходить. Ну случай грандсметы оставляем. Там грамотные люди. Программы -то пишутся не для их авторов. Ну а если "у власти окажется товарищ, который скажет, что нужно...", то нужно разбираться с этим товарищем.
-
> Германн © (28.05.16 02:09) [25]
> Вообще-то должны выходить.
не должны, в случае единичного обращения. если есть уверенность, что проблема массовая и волнует многих, тогда да.
точно так же, как и нельзя обращать уж очень много внимания на пожелания одного, пусть и очень общительного пользователя.
-
> [22] Rouse_ © (27.05.16 23:59) > - НУ ТАК ОНО_ЖЕ НЕ СОХРАНИЛОСЬ!!!
Недоработка. Надо чтобы ОНО всегда сохранеялось, независимо от ответа пользователя, но чтобы ОНО можно было отсенить, но приэтом, чтобы пользователь видел ЭТО, как ему хочется в каждый текущий момент.:)
-
2 Eraser © (28.05.16 02:16) [26]
> если есть уверенность, что проблема массовая и волнует многих, > тогда да. >
Ну и я примерно о том же. Случай ТС мне не очень понятен. Волнует ли эта проблема одного пользователя или многих?
-
> Rouse_ © (27.05.16 21:12) [18] > Патч экзешника рассматривается?
Да. Либо патч екзешника, либо хотпатч (это мне больше понятно как сделать)
-
> DayGaykin © (27.05.16 21:02) [17] > Программа у клиента сильно старой версии. Новые версии не > могут работать с той базой (выкидывают ошибки, а мест, где > это может произойти, в программе очень много) > Автор программы не предусмотрел нормального обновление и > одному ему известно как это делать.
Взять скопировать клиентскую базу, обновить до новой версии, посмотреть как она себя ведёт, подкрутить что надо, записывая ходы. После обновить уже базу у пользователя. Всяко меньше года.
> Автор программы не предусмотрел нормального обновление и > одному ему известно как это делать.
Имеющий глаза да увидит различия в структуре БД. Опять же, это всяко меньше года, тем более, что рано или поздно понадобится обновлять клиентские базы на новую версию.
|