|
|
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
Топик этот исключительно, чтобы поделиться инфой... Пишу я ворму.. и в лоаде забыл поставить открытие таблиц, а в ините пишу DODEFAULT() Thisform.SQL4Grid('') && метод для вфотмирования курсора и грида на его основе * сам SQL4Grid Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. все отработало.. грид как надо.. хотя вот не понимаю - а лоаде я не открывал таблицу.... как она сама?? но не в этом дело.. через некоторое время я вспомнил - и вставил в лоад отврутие базы и нужных таблиц: Код: plaintext 1. 2. 3. 4. после этого в гриде в некоторых полях Alignment сбился... вылечилось принудительной установной: Код: plaintext 1. 2. 3. Что же это было? VFP 7.0 Version 07.00.0000.9262 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:17 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
Если в дизайнере Grid ЯВНО не указан источник данных (т.е. в RecordSource стоит (None) написанное простым шрифтом), то при открытии формы такой Grid автоматически подхватывает первую попавшуюся открытую таблицу. Если форма работает в Default DataSession, то такие таблицы уже могли быть открыт до открытия формы. Команды Select-SQL также автоматически открывают таблицы-источники. Последующее изменение источника данных Grid без его предварительно сброса приводит к автоматической потере вообще всех настроек Grid. Разрушению его структуры. Для предотвращения подобной ситуации необходимо при проектировании формы (в дезайнере) явно указать источник данных для Grid. Если это (None), то надо просто нажать клавишу Enter, чтобы слово (None) было выделено жирным шрифтом. Изменение источника данных для Grid необходимо ВСЕГДА предварять сбросом старого источника, даже если его не было. ThisForm.Grid.RecordSource = "" ... ThisForm.Grid.RecordSource = "Новый источник" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 12:17 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
лучше бы он этого не умел лезет куда его не просят очень это мешает при написании универсальных классов на основе грида ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 12:18 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
alex11100лучше бы он этого не умел лезет куда его не просят очень это мешает при написании универсальных классов на основе грида не понял Если в дизайнере Grid ЯВНО не указан источник данных (т.е. в RecordSource стоит (None) написанное простым шрифтом), то при открытии формы такой Grid автоматически подхватывает первую попавшуюся открытую таблицу. ворма модальная + датасессия приватная.. то есть вроде бы таблицы не были открыты.. но не в этом суть Если форма работает в Default DataSession, то такие таблицы уже могли быть открыт до открытия формы. Команды Select-SQL также автоматически открывают таблицы-источники. Select-SQL открывает таблицы даже если не было указано где они? ведь вроде форма сама не должна знать путь в БД Последующее изменение источника данных Grid без его предварительно сброса приводит к автоматической потере вообще всех настроек Grid. Разрушению его структуры. как Вы видите источник я не менял вовсе.... кстати на выравнивание только НЕКОТОРЫХ ячеек у меня повлияла строка в лоаде: USE ids IN 0 SHARED закомментив ее эффект ломки элайна пропал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 13:24 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
на взлете грид с непрописанным источникам лезет сразу в первую открытую область и присваивает себе сразу этот источник и всем контролам своей коллекции доступно объяснил??? так вот когда я пишу унриверсальный класс и делаю его хитрый взлет приходится так изголяться чтобы ему повыбивать все нафиг из под ног, что ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 13:43 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
alex11100на взлете грид с непрописанным источникам лезет сразу в первую открытую область и присваивает себе сразу этот источник и всем контролам своей коллекции Что-то Вы недопоняли 1 WITH ThisForm.PLGrid1 .ColumnCount = 9 .RecordSourceType = 1 .RecordSource = "TmpFio" разве непрописан??? 2 разве я говорил, что грид подхватил не ту таблицу??? ГДЕ!!!??? данные были те что надо.. только фамилия и имя вышли со странный элайнментом и все.. остальные 7 полей остались с дефолтным элайнментом... мы говорим о разных вещах ведь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 13:50 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
вот в инит грида воткни set step on dodefa() и наслаждайся посмотри состояния всех контролов сразу все понятно станет а еще лучше в инит первого контрола грида в классах там еще чудней вначала дочерний контрол взлетает, затем тащит только грид за собой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:01 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
понимать и представлять это нужно только для того, чтобы бороться с этим а так если все устраивает и не напрягает, то почему, это наверное не нужно продвинитесь дальше - поймете почему фокс это ежик с приблудами, который и пользуют только потому, что этот ежик кой чего, да умеет, и приходится мириться с очень большой тележкой проблем и неприятностей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:05 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
alex11100 фокс это ежик с приблудами, который и пользуют только потому, что этот ежик кой чего, да умеет, и приходится мириться с очень большой тележкой проблем и неприятностей вот поэтому классы стараюсь и не писать.. и не заметил недостатка в этом Но тем не менее 1 было присвоение или нет - я считаю, что было - Вы, что нет.. 2 вопрос-то был не в том у меня не пропал источник грида, не вывелись какие-то другие данные, у меня в 2-х из 9 колонок грида слетел элайнмент и все, потому как принудительно я его и не ставил.... почему слетел только в 2-х колонках? если б слетел во всех - я бы не удивлялся... кстати все 9 полей символьные!!! (это чтобы меньше вопросов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:17 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
ну нет это чего если в мерс нужно лить бензин, то я на нем ездить не буду да классы и скрипты фокса это как раз то, что и нужно от него больше он нафиг не впился не то, что на нем ковырять эта лиса уже так достала но извините написание библиотек со своими классами это и есть самый верный подход а посмотреть было или нет поможет только дебужер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:26 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
а я вот пишу и забыл, что такое do form ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:27 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
alex11100а я вот пишу и забыл, что такое do form бессмысленна дискуссия сия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:51 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
а чейтоть бессмысленная от ручек получили проблему ну в этот раз победили, а что в следующий раз на грабельки не наступите???? а не проще раз написать класс грид, в который будут цепляться свои классы контролы который сам будет умный и отслеживать ошибки и сохранять свои настройки и ..... и еще работать всегда будет правильно везде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 15:11 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
А разве для Selecta необходимо открытие таблиц? А курсор конечно повис открытым после создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 15:17 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
FM32YO aka KIDSelect-SQL открывает таблицы даже если не было указано где они? ведь вроде форма сама не должна знать путь в БД Закройте все таблицы и базу данных и прямо в командном окне дайте команду вроде SELECT * FROM MyTab Таблица будет найдена либо в текущей директории, либо по путям, прописанным в SET PATH. Если там не будет обнаружена, то только тогда будет сообщение об ошибке. У Вас ведь "все работало" несмотря на то, что таблица Urar!Fios ЯВНО (командой USE) открыта не была. Откуда форма ее взяла? То, что "слетели" настройки столбцов - это явный признак того, что было некорректное переопределние источника данных для Grid. В данном случае логика примерно такая: При открытии формы в качестве источника Grid была использована первая попавшаяся таблица. Количество столбцов у нее видимо не соответствовало количеству столбцов, указанный в дизайнере Grid. При переопределении источника и произошел "слет" настроек у этих "лишних" столбцов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 15:20 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
Alex11100 от ручек получили проблему ну в этот раз победили, а что в следующий раз на грабельки не наступите???? какой-то Вы агрессивный так сильно Вас фокс достал? меня вот за 5 лет еще не достал Сразу надо было не курсов а вьюшку в БД - и, тогда не пришлось бы програмно грид рисовать.. дак поленился Я не говорю ничего плохого про классы.. они хороши, но мне они не нравятся, а написать класс ткоторый бы запускался как МойКГрид(МояТаблица, переченьполей) - и фсе.. грид на форме.. причем с любой таблицы.. увы... даже не пробовал создать... а можно ли? а стОит ли? ВладимирМ FM32YO aka KIDSelect-SQL открывает таблицы даже если не было указано где они? ведь вроде форма сама не должна знать путь в БД Таблица будет найдена либо в текущей директории, либо по путям, прописанным в SET PATH. Если там не будет обнаружена, то только тогда будет сообщение об ошибке. точно видимо по SET PATH и нашло ВладимирМ[ То, что "слетели" настройки столбцов - это явный признак того, что было некорректное переопределние источника данных для Grid. В данном случае логика примерно такая: При открытии формы в качестве источника Grid была использована первая попавшаяся таблица. Количество столбцов у нее видимо не соответствовало количеству столбцов, указанный в дизайнере Grid. При переопределении источника и произошел "слет" настроек у этих "лишних" столбцов. 1 при открытии формы? ну возможно и так... слетели настройки 1 и 2 столбца... вероятно Вы правы Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 17:24 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
2 FM32YO aka KID злой? да нет, вроде добрый был просто если ругаться не будешь, то так и просидите do form ... do form конечно стоит писать библиотеку с классами Вы просто облегчите себе жизнь, а то, что они Вам ненравятся, а что не нравится, то что когда Вы пишите Вы визуально не видите что это будет в конечном варианте, ну это надо воображение включить ага и билдеров нет, ну и что ж , это уже следующий виток программирования, да тяжело, никто не спорит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 17:48 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
alex11100 конечно стоит писать библиотеку с классами Вы просто облегчите себе жизнь, а то, что они Вам ненравятся, а что не нравится, то что когда Вы пишите Вы визуально не видите что это будет в конечном варианте, ну это надо воображение включить ага и билдеров нет, ну и что ж , это уже следующий виток программирования, да тяжело, никто не спорит то что мне действительно нужно классом описано давно... а так CreateObject - это просто не лучше и не хуже.. это ИМХО другая религия и только.... кому как удобней тот так и пишет но что-ты мы в демагогию начинаем уходить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 10:55 |
|
||
|
интересный глюк
|
|||
|---|---|---|---|
|
#18+
Hi FM32YO aka KID! Ты забыл, что грид "образовался" ещё ДО того как начал работать твой метод SQL4Grid - при этом он полностью проинициализировался по тем правилам что указал Владимир - т.е. поскольку в Load ты явно открыл таблицы (то что IN 0 усложняет немного понимание - но просто прими на веру, или проверь "экспериментально", что в текущей рабочей области оказалась таблица ids - поскольку она открывается первой а иных открытых таблиц нет, и явных команд типа SELECT 55 тоже нету :) ), то грид в соответствии со своим "нечеловеческим интеллектом" автоматически подхватил этот курсор как источник. При этом основную роль как раз и сыграло то, что на этапе дизайна для него свойство RecordSource было оставлено "пустым по умолчанию". Т.е. уже ДО выполнения твоего кода произошло первое "присвоение" и теперь грид привязан к курсору ids. В зависимости от значения ColumnCount уже на этом этапе может также произойти инициализация колонок грида (если там -1 то создастся столько колонок сколько полей в курсоре, иначе просто имеющиеся колонки инициализируются первыми N полями "привязанного" курсора) - т.е. у тебя колонки "привяжутся" к полям ids - помимо ControlSource также происходит инициализация и Alignment - точнее его "скрытой" второй половинки - т.к. значение по умолчанию для выравнивания это 3, это значит что решающее значение имеет тип данных поля! А типы данных полей курсора ids в этом отношении видимо оказались "несоответствующими" тому какие типы у полей твоего результатного курсора. НО даже если у тебя было указано в свойствах грида (на форме) ColumnCount=0 то это не будет играть решающего значения, из-за порядка команд в твоей процедуре! Теперь рассмотри что происходит при выполнении твоего кода - но "построчно" 1) Создаётся 9 колонок (если их ещё не было - иначе просто создаются "дополнительные" или удаляются "лишние") - при этом мы помним что грид то пока привязан к ids - и значит все создаваемые колонки автоматом привязываются к полям ids!!! 2) И только потом ты реально привязал грид к тому курсору который тебе необходим! 3) Устанавливая свойства колонок ты "в целом" победил результаты авто-инициализации. Теперь просто несколько моментов по поводу инициализации грида. Я бы не отказывался от удобств предоставляемых дизайнером, и потому уже на этапе разработки прописал и источник данных самого грида, и его колонок - а так же детали настройки "вложенных" в колонки контролов. При этом нам надо как-то обойти несколько печальных фактов: 1) В общем случае создавать источники данных для грида нужно вообще до начала его инициализации - т.е. в Load формы или в DE! НО с учётом того что для инициализации могут потребоваться данные переданные из точки вызова (параметры переданные извне в форму), это не всегда возможно. Впрочем никто не запрещает создать в Form.Load простой и пустой курсор-заглушку - т.е. курсор с определённым именем и известной структурой - через банальный CREATE CURSOR например, или через тот-же самый запрос, но не с реальными параметрами, а с "всегда ложным" условием - это вполне удовлетворит грид. Потом сделаешь перезапрос. 2) При пересоздании источника данных (в частности повторный SELECT в тот-же курсор, PACK, просто ручное закрытие/открытие таблицы) грид разрушается - это широко известно и способ решения проблемы так-же известен и весьма несложен - я когда-то добавил свойство к классу грида, прописал Assign метод на него, и теперь вся процедура "сохранить/восстановить грид" занимает 2 строки - сначала устанавливаем свойство в .T. - это обеспечивает "безопасность" при пересоздании курсора - а потом снова в .F. - и грид готов к работе. Что касается "как нашёл" - тут тоже всё очень просто - единственное замечание - OPEN DATABASE открывает базу "глобально" - т.е. она видна во всех датасессиях - и потому в собственно форме я бы не советовал писать код открытия базы - в форме достаточно указать SET DATABASE TO. Но и без этого твой запрос, без проблем найдёт таблицу, даже если она находится в каталоге не указанном в PATH и не являющемся текущим - при этом именно ссылка вида имяБД!имяТаблицы обеспечивает должную точность при адресации. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 01:11 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33487123&tid=1592573]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 467ms |

| 0 / 0 |
