Конференция "Прочее" » Заменить строку в EXE файле.
 
  • DayGaykin © (27.05.16 12:39) [0]
    Добрый день, если готовая программа, написанная на Delphi 7.
    В ней есть один кривой SQL запрос, который хочется поправить.
    Текст этого запроса задается не в ресурсах, а присваивается во время выполнения. Это известно, т.к. есть исходный код модуля, где это делается.
    И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (

    Вопрос, есть ли простой путь заменить эту строку?

    PS. Запрос для mysql 4, хранимых процедур нет, view-шек нет :(.

    Пересобрать программу/обратиться к разработчику - не вариант. Пожалуйста, просто примите это.
  • Плохиш © (27.05.16 12:42) [1]

    > Пересобрать программу/обратиться к разработчику

    Единственный вариант.
  • Kerk © (27.05.16 12:44) [2]
    Найти в асм-коде, где эта строка присваивается и поменять адрес присваиваемой строки. Саму строку положить в другое место, где она поместится.
  • iop © (27.05.16 13:01) [3]
    И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (


    создать вьюху, в которой часть запроса укорачивается и правится косяк.
    имя вьюхи подогнать под старый размер
  • iop © (27.05.16 13:02) [4]
    если будет слишком коротко, то добить каментами
  • iop © (27.05.16 13:03) [5]
    ... если не получится, нанять программиста
  • Kerk © (27.05.16 13:18) [6]

    > iop ©   (27.05.16 13:01) [3]
    >
    > И самое страшное: исправленный запрос длиннее исходного.
    >  Укоротить ну не получится никак (
    >
    > создать вьюху, в которой часть запроса укорачивается и правится
    > косяк.

    Кстати, классная мысль.
  • KSergey © (27.05.16 13:32) [7]
    Для кого автор пишет:

    > PS. Запрос для mysql 4, хранимых процедур нет, view-шек нет :(.
  • KSergey © (27.05.16 13:33) [8]
    > iop ©   (27.05.16 13:02) [4]
    > если будет слишком коротко, то добить каментами

    Пробелы ничем не хуже.
  • pavel_guzhanov © (27.05.16 13:33) [9]
    делали мы такое на прошлой работе. Открывали exe каким-то hex-редактором, заменяли запрос. Только вот по длине новые запросы были короче старых, и их дополняли пробелами. А для случая, когда новый запрос длиннее - то должно помочь

    > создать вьюху, в которой часть запроса укорачивается
  • pavel_guzhanov © (27.05.16 13:35) [10]

    > Для кого автор пишет:
    >
    > > PS. Запрос для mysql 4, хранимых процедур нет, view-шек
    > нет :(.

    Блин, я это проигнорировал :о)
  • iop © (27.05.16 13:39) [11]
    тогда нанять шестиклассника (у них уже каникулы) который перенесет программистам базу на пятый мускул.
  • DayGaykin © (27.05.16 14:25) [12]
    Эта программа такой дремучий муровейник, который нельзя трогать - ни дай бог что случится. И версия установлена старая. Собранная из исходников версия не работает с этой базой, потому что новая.
    Как автор этого творения обновлял ее одному ему известно. Возможно что никак или держал версию исходников.
  • iop © (27.05.16 14:32) [13]
    пересобирать нельзя, сервер менять  нельзя, ничего нельзя....

    а на форуме-то про программу спрашивать вообще можно было?
    может так и было предназначено судьбой жить с этой болью?
  • Kerk © (27.05.16 15:06) [14]
    А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п. Трэш конечно, но если все остальное нельзя? :)
  • SergP © (27.05.16 16:40) [15]

    > Kerk ©   (27.05.16 15:06) [14]


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


    > DayGaykin ©   (27.05.16 12:39)  


    а запрос нельзя как-нить написать по другому, чтобы он влез на место старого?
  • KSergey © (27.05.16 17:07) [16]
    > Kerk ©   (27.05.16 15:06) [14]
    > А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п.

    А ведь идея в самом деле хороша.
    Правда не понятно что в результате отвиснет (где-то имя таблицы формируется вдруг динамически, потому не будет замечено при замене), но хотя бы луч света )
  • DayGaykin © (27.05.16 21:02) [17]

    > 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_* - это временные таблицы, созданные в этой функции и они убиваются при выходе.

    Программа у клиента сильно старой версии. Новые версии не могут работать с той базой (выкидывают ошибки, а мест, где это может произойти, в программе очень много)
    Автор программы не предусмотрел нормального обновление и одному ему известно как это делать. Если пересоберу, то могу огрести новых ошибок. Если что-то изменю в базе - так же. Мы даже версию БД боимся менять, да и ничем это не поможет.
    Моя задача поддерживать эту программу, пока мы не отладим как следует новую (а это еще год минимум).
  • Rouse_ © (27.05.16 21:12) [18]
    Патч экзешника рассматривается?
  • NoUser © (27.05.16 21:36) [19]
    В теории:
    1) докрутить нужный ресурс ресурс-хаком или чем другим, запомнив нужное смещение
    2) посмотреть/найти идой или чем другим откуда ссылки на старую строку
    3) подредактировать экзе, учитывая смещение новой строки
  • Плохиш © (27.05.16 22:09) [20]

    > Моя задача поддерживать эту программу, пока мы не отладим
    > как следует новую (а это еще год минимум).

    Наймите нормального менеджера для общения с клиентами, который в состоянии объяснить клиенту, что поддержка глубоко старых версий не подразумевает внесение в них каких-либо изменений.
  • NoUser © (27.05.16 23:38) [21]
    Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос, что денюжка платится,  а программа не работается ))
  • Rouse_ © (27.05.16 23:59) [22]

    > NoUser ©   (27.05.16 23:38) [21]
    > Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос,
    >  что денюжка платится,  а программа не работается ))

    Это очень легко - несоблюдение технических требований для запуска продукта :)

    Расскажу махонькою историю:
    Вот есть у нас пользователи, жадные до жути - весь мозг техподдержке вынесли своими хотелками, которые наш техотдел должен (а техотдел всегда периодически кому-то должен) реализовать (не важно что - главное чтобы программисты  были заняты) но что-то должен реализовать, причем вчера.

    И вот пользователь говорит - "ваша программа не работает!!!"

    Заметьте - он не говорит, что программа работает не правильно.
    Он говорит - не работает и баста.

    Спрашиваем:
    - а что случилось?
    - я закрыла программу и ничего не сохранилось
    - а при закрытии диалог при сохранении был?
    - да, был
    - что вы сделали?
    - ну щелкнула там
    - куда именно? На "Да, сохранить" или на "Нет, не сохранять" или на "Отмена"?
    - на "Нет не сохранять"
    - эмм... А что вы от нас хотите?
    - НУ ТАК ОНО_ЖЕ НЕ СОХРАНИЛОСЬ!!!
  • Германн © (28.05.16 00:47) [23]

    > NoUser ©   (27.05.16 23:38) [21]
    >
    > Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос,
    >  что денюжка платится,  а программа не работается ))

    Пока не было нигде автором сказано, что пользователь постоянно платит деньги за поддержку.
  • Eraser © (28.05.16 01:06) [24]

    > Rouse_ ©   (27.05.16 23:59) [22]

    такие вещи за пределы службы поддержки вообще не должны выходить.
    не дай бог если у власти окажется товарищ, который скажет, что нужно прислушаться к этой женщине и каким-то образом поменять UI и юзабилити, чтобы было, как у Эппла, понятно каждой блондинке и все работало автоматически. тут можно вешаться, для корпоративного софта это смерть )

    в саппорт вообще много графоманов пишет, добрая треть. любители поговорить по телефону - это вообще жэсть, там 4/5 несусветная чушь. не отключаем саппорт по телефону только по той причине, что оставшиеся 1/5, зачастую, крупные и серьезные клиенты.

    :-)
  • Германн © (28.05.16 02:09) [25]

    > Eraser ©   (28.05.16 01:06) [24]
    >
    >
    > > Rouse_ ©   (27.05.16 23:59) [22]
    >
    > такие вещи за пределы службы поддержки вообще не должны
    > выходить.

    Вообще-то должны выходить. Ну случай грандсметы оставляем. Там грамотные люди.
    Программы -то пишутся не для их авторов.
    Ну а если "у власти окажется товарищ, который скажет, что нужно...", то нужно разбираться с этим товарищем.
  • Eraser © (28.05.16 02:16) [26]

    > Германн ©   (28.05.16 02:09) [25]


    > Вообще-то должны выходить.

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

    точно так же, как и нельзя обращать уж очень много внимания на пожелания одного, пусть и очень общительного пользователя.
  • Inovet © (28.05.16 02:24) [27]
    > [22] Rouse_ ©   (27.05.16 23:59)
    > - НУ ТАК ОНО_ЖЕ НЕ СОХРАНИЛОСЬ!!!

    Недоработка. Надо чтобы ОНО всегда сохранеялось, независимо от ответа пользователя, но чтобы ОНО можно было отсенить, но приэтом, чтобы пользователь видел ЭТО, как ему хочется в каждый текущий момент.:)
  • Германн © (28.05.16 02:45) [28]
    2 Eraser ©   (28.05.16 02:16) [26]

    > если есть уверенность, что проблема массовая и волнует многих,
    >  тогда да.
    >

    Ну и я примерно о том же.
    Случай ТС мне не очень понятен. Волнует ли эта проблема одного пользователя или многих?
  • DayGaykin © (28.05.16 09:24) [29]

    > Rouse_ ©   (27.05.16 21:12) [18]
    > Патч экзешника рассматривается?

    Да. Либо патч екзешника, либо хотпатч (это мне больше понятно как сделать)
  • KSergey © (28.05.16 14:08) [30]
    > DayGaykin ©   (27.05.16 21:02) [17]
    > Программа у клиента сильно старой версии. Новые версии не
    > могут работать с той базой (выкидывают ошибки, а мест, где
    > это может произойти, в программе очень много)
    > Автор программы не предусмотрел нормального обновление и
    > одному ему известно как это делать.

    Взять скопировать клиентскую базу, обновить до новой версии, посмотреть как она себя ведёт, подкрутить что надо, записывая ходы. После обновить уже базу у пользователя.
    Всяко меньше года.

    > Автор программы не предусмотрел нормального обновление и
    > одному ему известно как это делать.

    Имеющий глаза да увидит различия в структуре БД.
    Опять же, это всяко меньше года, тем более, что рано или поздно понадобится обновлять клиентские базы на новую версию.
 
Конференция "Прочее" » Заменить строку в EXE файле.
Есть новые Нет новых   [134433   +22][b:0][p:0.001]