powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Топик "как я лажанулся"
20 сообщений из 1 695, страница 68 из 68
Топик "как я лажанулся"
    #40127700
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Rusov
У меня довольно много мест где enum читается из потока, с контролем диапазона. Сейчас это делается функцией, типа:

Код: pascal
1.
V := TSomeEnum( Reader.ReadEnum( Ord(Low(TSomeEnum)), Ord(High(TSomeEnum)) )


Приходится писать имя типа 3 раза.
Хотелось типа:

Код: pascal
1.
V := Reader.ReadEnum<TSomeEnum>


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

V := TSomeEnum( Reader.ReadEnum( TypeInfo(TSomeEnum) )

Если хочешь, могу поделиться своим TEnum<T> (также есть и TSet<TE, TS>)
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40127723
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal
Если хочешь, могу поделиться своим TEnum<T> (также есть и TSet<TE, TS>)

А можно для всех поделиться, пожалуйста?
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40127750
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Как выяснилось, это работает не для всех Enum'ов, т.ч. мне не подходит. А так я "вдохновился" этим:

https://gist.github.com/ortuagustin/6342894207caa0f71a5d23475670281d
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40127785
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing
А можно для всех поделиться, пожалуйста?

Вот тут выкусил из общего модуля: https://gist.github.com/Fr0sT-Brutal/bdf9eb2a177fd5216ad3e085c786c993
Maxim Rusov
Как выяснилось, это работает не для всех Enum'ов, т.ч. мне не подходит. А так я "вдохновился" этим:
https://gist.github.com/ortuagustin/6342894207caa0f71a5d23475670281d

Ну, можно просто избавиться от подобных энумов. Я у себя так и сделал. Забить ненужные элементы заглушками, если не с полусотни старт, конечно.
А ссылка хорошая, изучу
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40133850
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В новом проекте коллега сервис для рассылки писем назвал mail_sander
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40133864
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes,

И шо? У меня сервис SQLBOT зовется....
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40133884
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes
В новом проекте коллега сервис для рассылки писем назвал mail_sander

В одном из первых проектов, в которых я участвовал, была следующая структура данных: договор, дополнительные соглашения к нему, каждое из которых вводило какие-то изменения. Соответственно, в трёх или четырёх десятках таблиц были поля input_id (соглашение, которым этот элемент введён) и cancel_id (соглашение, которым этот элемент отменён). А теперь решающий писк: в трёх или четырёх таблицах (из этих четырёх десятков) поле называлось camcel_id. И к моменту моего прихода в таком виде уже было пробито в сотни запросов. Очень хотелось убивать каждый раз, когда на это натыкался.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40133887
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вел как-то один легаси-проект. Так каких полей там только не было - kredit, zena, komment ...
Но больше всего выбешивало то, как в разных таблицах названо поле с адресом - adres, addres, address. Везде по разному, млять.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40133939
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас все SQL идентификаторы (названия полей, таблиц, названия и параметры процедур) вынесены в отдельный файл констант. Поэтому при рефракторинге достаточно изменить этот файл и посмотреть, где отвалится компиляция
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134399
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
У нас все SQL идентификаторы (названия полей, таблиц, названия и параметры процедур) вынесены в отдельный файл констант. Поэтому при рефракторинге достаточно изменить этот файл и посмотреть, где отвалится компиляция


Особенно помогает в запросах типа ExecQuery("bla-bla",?,?,?,?)
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134511
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
Особенно помогает в запросах типа ExecQuery("bla-bla",?,?,?,?)
Не понял, что это за запросы. Если речь о динамическом формировании SQL, то у меня сделано так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type
  TSQLStoredProc = record
    Name: string;
    Params: string;
    function ExecuteSQL: string;
    function SelectSQL: string;
  end;

  TSQLTable = record
    Name: string;
    function SelectSQL(const AFields: array of string): string;
  end;

И все используемые TSQLStoredProc и TSQLTable перечислены в константах
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134513
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
del
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134519
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Если речь о динамическом формировании SQL, то у меня сделано так

А запросы всегда идут из единственной таблицы?

P.S. Я не хочу критиковать решение, которого не видел, но по описанию у меня не получается представить себе, как я смог бы применять нечто подобное так, чтобы выгоды перевешивали геморрой. Если бы я задался целью добиться такого эффекта (легко "рефакторить" названия таблиц и хранимок), то я воспользовался бы макросами, типа

Код: plaintext
select t1.id, t2.value from %table1% t1, %table2% t2 where ...

Впрочем, мне кажется, что практический выхлоп и в этом случае не окупается ежедневным усложнением. Лучше сразу нормально называть объекты, а если раз в пару лет таки потребуется переименовать - потратить пятнадцать минут на вдумчивый поиск.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134525
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
А запросы всегда идут из единственной таблицы?
1. У меня динамических запросов, которые бы мне пришлось вставлять из кода очень мало. Основная масса запросов у меня формируется так
Код: pascal
1.
SQL := CopyBeforeWhere(Query1.SQL.Text) + QueryParamManager.ToString;


2. Если одной таблицы не хватает, используется VIEW
3. Никто не мешает написать
Код: pascal
1.
2.
3.
4.
const
  CMyTable: TSQLTable (
    Name: 'table1 t1 JOIN table2 t2';
  );

но такого у меня точно нигде нет.
softwarer
Лучше сразу нормально называть объекты
Угу. Из моего опыта мне только раз пришлось столкнуться с переименованием таблицы. И то это были скорее эстетические закидоны другого программиста
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134533
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Угу. Из моего опыта мне только раз пришлось столкнуться с переименованием таблицы. И то это были скорее эстетические закидоны другого программиста
из недавно всплывших шедевров в одной самописной ERP:
в табличке маршрутных листов было обнаружено поле PriceP целочисленного типа.
никто из тех, кто сидит на сопровождении этой системы не мог сказать, что это и зачем.
стали искать тех, кто когда-то это чудо творил.
нашли.
вопросили.
и о#уели...
это не цена, не-а.
это ПРИЦЕП!
(форин кей отстутствует)
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134539
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
1. У меня динамических запросов, которые бы мне пришлось вставлять из кода очень мало. Основная масса запросов у меня формируется так
Код: pascal
1.
SQL := CopyBeforeWhere(Query1.SQL.Text) + QueryParamManager.ToString;


Как же быть с таблицей, которая упомянута в этом самом Query1.SQL.Text? CopyBeforeWhere отрефакторит её имя или как?

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

Код: plaintext
select (select count(*) from dual where dummy = 'Y') cnt from dual where dummy = 'X'

или на каком-нибудь

Код: plaintext
1.
2.
3.
4.
5.
with
  table1 as (select * from dual where 1 = 2)
select
  *
from
  table1

он сработает как-нибудь "не так".
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134692
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
CopyBeforeWhere отрефакторит её имя
Зачем? Просто выкусит все до WHERE
softwarer
он сработает как-нибудь "не так".
Да. Но когда сработает, тогда и будем думать. Благо ошибка проявится сразу же. Опять же для сложных случаев есть вьюхи и селективные процедуры.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134699
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

2. Если одной таблицы не хватает, используется VIEW

Серьезно? На каждый запрос вьюха? Или у вас такая бешеная денормализация данных, что почти всегда одной таблицы хватает.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40134881
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Зачем? Просто выкусит все до WHERE

Ну то есть если там упомянута TABLE1, а потом её отрефакторили в TABLE2, то список констант не очень поможет. Или как?

_Vasilisk_
Да. Но когда сработает, тогда и будем думать. Благо ошибка проявится сразу же.

Ах, если бы. Я могу нарисовать несколько прикольных сценариев. Не знаю, насколько они возможны конкретно у вас, но в любом случае - предпочитаю не закладывать возможности для их осуществления. Тем более, что, собственно, не понимаю преимуществ, которые достигались бы таким подходом по сравнению с другими.
...
Рейтинг: 0 / 0
Топик "как я лажанулся"
    #40136498
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
захожу в хром
тащу файл с шарепойнта
нету
Не удается получить доступ к сайту
Веб-страница по адресу https://***.sharepoint.com/sites/****/10010000000100021157.tif, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_INVALID_RESPONSE

глянул строку, поменял dev на prd, выполняю...
смотрю, в урле строка осталась та же и сообщение то же - нету такого файла
5 раз пробовал

потом досмотрел на нижней панельке - файл есть, и он 6 раз уже скачался, но урл в хроме всё равно остался прежним
...
Рейтинг: 0 / 0
20 сообщений из 1 695, страница 68 из 68
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Топик "как я лажанулся"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (9): Анонимы (6), Yandex Bot 1 мин., Bing Bot 1 мин., Google Bot 2 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]