Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.07.30;
Скачать: CL | DM;

Вниз

Заменить строку в EXE файле.   Найти похожие ветки 

 
DayGaykin ©   (2016-05-27 12:39) [0]

Добрый день, если готовая программа, написанная на Delphi 7.
В ней есть один кривой SQL запрос, который хочется поправить.
Текст этого запроса задается не в ресурсах, а присваивается во время выполнения. Это известно, т.к. есть исходный код модуля, где это делается.
И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (

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

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

Пересобрать программу/обратиться к разработчику - не вариант. Пожалуйста, просто примите это.


 
Плохиш ©   (2016-05-27 12:42) [1]


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

Единственный вариант.


 
Kerk ©   (2016-05-27 12:44) [2]

Найти в асм-коде, где эта строка присваивается и поменять адрес присваиваемой строки. Саму строку положить в другое место, где она поместится.


 
iop ©   (2016-05-27 13:01) [3]

И самое страшное: исправленный запрос длиннее исходного. Укоротить ну не получится никак (


создать вьюху, в которой часть запроса укорачивается и правится косяк.
имя вьюхи подогнать под старый размер


 
iop ©   (2016-05-27 13:02) [4]

если будет слишком коротко, то добить каментами


 
iop ©   (2016-05-27 13:03) [5]

... если не получится, нанять программиста


 
Kerk ©   (2016-05-27 13:18) [6]


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

Кстати, классная мысль.


 
KSergey ©   (2016-05-27 13:32) [7]

Для кого автор пишет:

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


 
KSergey ©   (2016-05-27 13:33) [8]

> iop ©   (27.05.16 13:02) [4]
> если будет слишком коротко, то добить каментами

Пробелы ничем не хуже.


 
pavel_guzhanov ©   (2016-05-27 13:33) [9]

делали мы такое на прошлой работе. Открывали exe каким-то hex-редактором, заменяли запрос. Только вот по длине новые запросы были короче старых, и их дополняли пробелами. А для случая, когда новый запрос длиннее - то должно помочь

> создать вьюху, в которой часть запроса укорачивается


 
pavel_guzhanov ©   (2016-05-27 13:35) [10]


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

Блин, я это проигнорировал :о)


 
iop ©   (2016-05-27 13:39) [11]

тогда нанять шестиклассника (у них уже каникулы) который перенесет программистам базу на пятый мускул.


 
DayGaykin ©   (2016-05-27 14:25) [12]

Эта программа такой дремучий муровейник, который нельзя трогать - ни дай бог что случится. И версия установлена старая. Собранная из исходников версия не работает с этой базой, потому что новая.
Как автор этого творения обновлял ее одному ему известно. Возможно что никак или держал версию исходников.


 
iop ©   (2016-05-27 14:32) [13]

пересобирать нельзя, сервер менять  нельзя, ничего нельзя....

а на форуме-то про программу спрашивать вообще можно было?
может так и было предназначено судьбой жить с этой болью?


 
Kerk ©   (2016-05-27 15:06) [14]

А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п. Трэш конечно, но если все остальное нельзя? :)


 
SergP ©   (2016-05-27 16:40) [15]


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


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


> DayGaykin ©   (27.05.16 12:39)  


а запрос нельзя как-нить написать по другому, чтобы он влез на место старого?


 
KSergey ©   (2016-05-27 17:07) [16]

> Kerk ©   (27.05.16 15:06) [14]
> А много места не хватает? Переименуй таблицу, сделай имена полей покороче и т.п.

А ведь идея в самом деле хороша.
Правда не понятно что в результате отвиснет (где-то имя таблицы формируется вдруг динамически, потому не будет замечено при замене), но хотя бы луч света )


 
DayGaykin ©   (2016-05-27 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_ ©   (2016-05-27 21:12) [18]

Патч экзешника рассматривается?


 
NoUser ©   (2016-05-27 21:36) [19]

В теории:
1) докрутить нужный ресурс ресурс-хаком или чем другим, запомнив нужное смещение
2) посмотреть/найти идой или чем другим откуда ссылки на старую строку
3) подредактировать экзе, учитывая смещение новой строки


 
Плохиш ©   (2016-05-27 22:09) [20]


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

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


 
NoUser ©   (2016-05-27 23:38) [21]

Плохиш ©, и какую бы ты привел аргументацию в ответ на вопрос, что денюжка платится,  а программа не работается ))


 
Rouse_ ©   (2016-05-27 23:59) [22]


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

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

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

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

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

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


 
Германн ©   (2016-05-28 00:47) [23]


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

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


 
Eraser ©   (2016-05-28 01:06) [24]


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

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

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

:-)


 
Германн ©   (2016-05-28 02:09) [25]


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

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


 
Eraser ©   (2016-05-28 02:16) [26]


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


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

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

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


 
Inovet ©   (2016-05-28 02:24) [27]

> [22] Rouse_ ©   (27.05.16 23:59)
> - НУ ТАК ОНО_ЖЕ НЕ СОХРАНИЛОСЬ!!!

Недоработка. Надо чтобы ОНО всегда сохранеялось, независимо от ответа пользователя, но чтобы ОНО можно было отсенить, но приэтом, чтобы пользователь видел ЭТО, как ему хочется в каждый текущий момент.:)


 
Германн ©   (2016-05-28 02:45) [28]

2 Eraser ©   (28.05.16 02:16) [26]

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

Ну и я примерно о том же.
Случай ТС мне не очень понятен. Волнует ли эта проблема одного пользователя или многих?


 
DayGaykin ©   (2016-05-28 09:24) [29]


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

Да. Либо патч екзешника, либо хотпатч (это мне больше понятно как сделать)


 
KSergey ©   (2016-05-28 14:08) [30]

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

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

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

Имеющий глаза да увидит различия в структуре БД.
Опять же, это всяко меньше года, тем более, что рано или поздно понадобится обновлять клиентские базы на новую версию.



Страницы: 1 вся ветка

Текущий архив: 2017.07.30;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.004 c
2-1441605362
Иван Д.
2015-09-07 08:56
2017.07.30
Кроказябры в Post-Запросе.


15-1464261672
ВладОшин
2016-05-26 14:21
2017.07.30
Сломал Indy в рабочей Delphi6. Починить не получилось


15-1464341989
DayGaykin
2016-05-27 12:39
2017.07.30
Заменить строку в EXE файле.


15-1462560299
Inovet
2016-05-06 21:44
2017.07.30
С Днём Радио!


15-1464298202
Юрий
2016-05-27 00:30
2017.07.30
С днем рождения ! 27 мая 2016 пятница