|
|
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Господа профессионалы, помогите мне пожалуйста! Ситуация в следующем: Есть одна форма и две таблицы. В форме - в Text1 и text2 пользователь вводит значения и нажимает кнопку подтверждения. Программа ищет в таблице access_table запись с такими значениями. Если такая найдена, то записать ее id в log_table и переходит к другой форме, иначе - выходит. Структура таблиц: access_table |--------------------------------| | id | Login | Password | |--------------------------------| log_table |----------------------------| | id | User_id | Time | |----------------------------| Я делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Но! Результат всегда один. Как при правильно введенных значениях так и при не правильных, программа - завершается... Помогите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 20:54 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Можно что-нить типа такого поробывать: USE log_table IN 0 USE access_table IN 0 SELECT access_table LOCATE FOR (UPPER(access_table.Login) = UPPER(thisform.text1.Value) ) AND; (UPPER(access_table.Password) = UPPER (thisform.text2.Value) )) IF FOUND() INSERT INTO log_table (user_id, time) VALUES (access_table.id , date()) thisForm.Release DO FORM 'Forms\MainMenu.scx' ELSE thisForm.Release ENDIF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 22:49 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Да нет вся твоя ошибка заключается в одной строке. Смотри как надо (и у тебя все получится): IF ((access_table.Login = alltrim(thisform.text1.Value) ) AND ; (access_table.Password = alltrim(thisform.text2.Value))) THEN id = access_table.id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:05 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Ссори хотел как лучше, получилось как всегда. Вот так будет лучше: Да и вообще правильно говорит Guest1000 сделай следующим образом: CLOSE TABLES all id = 0 USE Tables\access_table IN 0 USE Tables\log_table.dbf IN 0 SELECT('access_table') * просто чтоб не возникло путаницы в дальнейшем num = RECCOUNT('access_table') * STEP 1 вообще-то идет по умолчанию (смысла нет эту команду оставлять) FOR i = 1 TO num GOTO i IF ((access_table.Login=ALLTRIM(thisform.text1.Value)) AND ; (access_table.Password=ALLTRIM(thisform.text2.Value))) THEN ; id = access_table.id EXIT ENDIF ENDFOR SELECT('log_table') IF id <> 0 THEN INSERT INTO log_table (user_id, time) VALUES (id, date()) thisForm.Release DO FORM 'Forms\MainMenu.scx' ELSE thisForm.Release CLOSE ALL ENDIF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:45 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за советы! Реализовал как вы говорили. Последний и предпоследний варианты - работают, но! В таблицу они пишут не id из первой таблицы, а число 1! По любому, тоесть, должен например записать 1001, а пишет 1. Должен 1003 а пишет 1. Господа, что это как вы думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:53 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Пришли исходники (2 таблицы, и 2 формы) скажу точно! majibiiii@yandex.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:55 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
И еще! он - не проверяет верность! тоесть он не ищет! я ввел значение, которого не существует в таблице 1 (там где ищем) а в базу всеравно зашел!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:56 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ок. спасибо. пришлю через 5 минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 00:02 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
mr. Eofок. спасибо. пришлю через 5 минут Просьба сообщение отослать еще раз (файл оказался испорченным) без инструкций... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 00:20 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Вот файл: http://www.webfile.ru/1198321 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 00:30 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 00:55 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Большое спасибо! Все - работает! Честно сказать, круто, хотя зачем нужен пробел " " - я так и не понял.. Но всеравно - спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 00:58 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Отвечаю пробел нужен для того чтобы fox автоматически (при пустом text2 и правильном логине) не подставлял правильное значение в адрес. Короче пользуйся на здоровье! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 01:01 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
PUBLIC pass * Инициализация переменной перед тем, как нажать кнопку, а затем pass = allt(pass) select count(*) flag ,p.* from TablePassword p where p.pasword = pass into cursor MyCursor sele MyCur if flag #0 insert into LogTable values(MyCur->id,IdUser,sysdate) messagebox('Вас приветствует программа....!') else messagebox('Ошибка идентификации!') endif rele pass ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 01:06 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Поправь имя курсора везде MyCursor. Пользуйся запросами везде, где можно. А можно везде. Не втыкай явные циклы, не используй replace... и не придется пробелы считать, думать как и что сравнивать. Изучи команды SQL - поможет наперед!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 01:11 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselectПоправь имя курсора везде MyCursor. Пользуйся запросами везде, где можно. А можно везде. Не втыкай явные циклы, не используй replace... и не придется пробелы считать, думать как и что сравнивать. Изучи команды SQL - поможет наперед!!! Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 02:24 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselectПоправь имя курсора везде MyCursor. Пользуйся запросами везде, где можно. А можно везде. Не втыкай явные циклы, не используй replace... и не придется пробелы считать, думать как и что сравнивать. Изучи команды SQL - поможет наперед!!! Для поиска одной записи использовать Select-SQL? Можно, конечно, но это называется "из пушки по воробьям". "Использовать везде, где можно" - слишком категорично. Получишь массу проблем и тормозов. Как ни странно, но Select-SQL далеко не всегда самый быстрый способ поиска данных. Вообще-то, самый первый ответ от Guest1000 - самый правильный. Вместо перебора следует использовать команду LOCATE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 14:32 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Еше раз об SQL. Еще раз - применяйте везде. Меньше ошибок, Код короче, работает быстрее в разы, отладка минимальна - негде косячить. А "ПУШКА" - это не пушка, а механизм, причем гораздо менее затратный во всех отношениях. Надо уметь им пользоватться, в т.ч. индексами. По индексированной таблице select работает как seek. Короче, читайте хорошие книги, не живите в прошлом веке - паровоз уже уехал далеко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 14:42 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselectНадо уметь им пользоватться, в т.ч. индексами. Золотые слова! Я серьезно. Только почему Вы применяете их выборочно? Для Select-SQL: "учитесь пользоваться", а для всех остальных команд поиска: "прошлый век", "поезд ушел"? Если рассматривать команду Select-SQL, то, в общем случае: 1) Сложнее для понимания. Как следствие, кличество ошибок больше . Сложнее в отладке. Накосячить тоже есть где. Не в синтаксисе, а именно в логике. Например, Вы уже накосячили даже в такой примитивной задаче. Ошибочная логика. Вас подвела именно кажущаяся простота. Как собственно задачи, так и конструкции Select-SQL. Точнее, не то, чтобы "накосячили", а сделали ряд допущений, при которых такая логика будет работать. Но не спросили автора топика, а действительно ли у него заданы эта граничные условия? В данном случае: -) SET ANSI (возможен ли поиск по первым символам?) -) Может ли быть для разных Login один и тот же Password (где проверка Login?) -) Уже не по Select-SQL: использовать PUBLIC для локальных задач - получить большие проблемы 2) Есть ряд задач, когда Select-SQL работает значительно медленнее навигационных команд 3) Если речь идет о таблицах, объем записей которых невелик (не думаю, что список пользователй так уж огромен), то разница в скорости команд Select-SQL и навигационных команд не ощутима. Как для программы, так и для пользователя Для справки : ВСЕ команды FoxPro имеющие опцию FOR также используют Rushmore-оптимизацию. Для полного ее использования рекомендуется перед такими командами отключать главнй индекс (SET ORDER TO 0). В этом случае скорость работы таких команд сопоставима со скоростью SEEK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 15:10 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Володя! В итоге есть задача, а она на самом деле достаточно тривиальна и проста. Делать туманные представления о возможных проблемах там, где их нет не вижу смысла и опыт (более 20 лет) показал, что именно SQL наиболее полно соответствует именно сложным программам с внушительной логикой. А переход на работу в СУБД ORACLE и совсем привел к мысли, что там, где есть выбор между SQL и чем угодно еще нужно выбирать SQL. Собственно, это показала мировая практика и тут Ваше мнение вряд ли что изменит. Во-вторых. Явно пишет новичек и именно ему, а не Вам я дал вполне ответственный совет. В третьих. И Вам советую применять SQL везде, где можно. Попрактикуете и наверняка согласитесь. Я тоже лет 10 назад подписался бы под вашим ответом. С наилучшими, искренне Ваш... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 22:31 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselectВ третьих. И Вам советую применять SQL везде, где можно. Попрактикуете и наверняка согласитесь.... Это очень спорный совет... Не вдаваясь в подробности хотелось бы зметить для чистоты ответа (поддержав замечание Владимира), что команды SEEK и предикт FOR работают во многих случаях намного быстрее CRUD комманд, но это относится исключительно к FoxPro, так как есть выбор... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 22:43 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
Sergey Ch ORAselectВ третьих. И Вам советую применять SQL везде, где можно. Попрактикуете и наверняка согласитесь.... Это очень спорный совет... Не вдаваясь в подробности хотелось бы зметить для чистоты ответа (поддержав замечание Владимира), что команды SEEK и предикт FOR работают во многих случаях намного быстрее CRUD комманд, но это относится исключительно к FoxPro, так как есть выбор... Все относительно - разумеется, но есть и вопрос, на который давался ответ. И речь идет о подходе, а не о частностях и подход я считаю верным именно тот, который советую. Быстрее и "с тормозами" очень сильно зависит от частностей. Но и они не отменяют преимуществ SQL. Это вовсе не означает, что надо инициализировать локальную переменную всесто '01' конструкцией с селектом. Однако в теле программы гораздо понятнее именно селекты... С уважением... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 23:12 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselectОднако в теле программы гораздо понятнее именно селекты... Применительно к Фоксу... - Селекты могут быть и гораздо непонятнее, особенно при использовании evaluate() и макроподстановки... что сплошь и рядом случается при наращивании пользовательского интерфейса запросов. - Селекты себя оправдывают в логике вычислений и отбора данных, "скрытых" от пользователя. - Селекты себя мало оправдывают в интерактивном режиме, поскольку проще связать базу-вью-грид и делать locate по эвенту (извращаюсь я для примера :), чем отбор 1 записи из базы с 1-5-20 млн. по условию на 5 полей 2ВладимирМ да это я так, давно уже в ветку не заглядывал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 20:13 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
хороший язык фокс ((( только спецов на нем все меньше ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 20:44 |
|
||
|
Ошибка программы
|
|||
|---|---|---|---|
|
#18+
ORAselect В итоге есть задача, а она на самом деле достаточно тривиальна и проста. Делать туманные представления о возможных проблемах там, где их нет не вижу смысла и опыт (более 20 лет) показал, что именно SQL наиболее полно соответствует именно сложным программам с внушительной логикой. В данном случае использование Select-SQL усложняет и затуманивает решение задачи. Зачем мне подсчитывать количество , если надо найти одну единственную запись? Любую. ORAselectА переход на работу в СУБД ORACLE и совсем привел к мысли, что там, где есть выбор между SQL и чем угодно еще нужно выбирать SQL. Не совсем так. В данном случае это привело к лености мысли. У Вас есть две среды разработки: Хранилище данных (в данном случае ORACLE) и FoxPro. Каждая среда предполагает определенную идеологию работы. Это означает, что надо постоянно "переключаться" с одной идеологии на другую. Это сложно и трудно. А поскольку FoxPro позволяет использовать Select-SQL, то для простоты Вы сделали вывод: надо везде использовать одинаковые команды. Это проще . Для Вас. Но это вовсе не означает, что это проще на самом деле. ORAselectСобственно, это показала мировая практика и тут Ваше мнение вряд ли что изменит. После такого заявления, обычно предлагается привести "явки и пароли". Знаете ли, после советского воспитания, я слабо верю лозунгам и призывам типа: Я, как и весь трудовой народ... Говори за себя, а "весь трудовой народ" еще неизвестно как думает Как мне кажется, это вовсе не "мировая практика", а Ваше личное мнение. ORAselectВо-вторых. Явно пишет новичек и именно ему, а не Вам я дал вполне ответственный совет. Вот именно! Если Вы даете какой-то совет, то аргументируйте его! ПОЧЕМУ надо делать именно так, а не иначе? А лозунги, они лозунги и есть. Рассчитаны не на знание, а на эмоции. ORAselectВ третьих. И Вам советую применять SQL везде, где можно. Попрактикуете и наверняка согласитесь. Я тоже лет 10 назад подписался бы под вашим ответом. Применять инструмент надо по назначению . Расхожий штамп: микроскопом гвозди забивать. Ведь можно же! Почему не забивают? Ну нет никаких аргументов в данном случае в пользу Select-SQL. Не дает он здесь никакого выигрыша. Ни в чем. Ни в понимании, ни в простоте, ни в скорости. Усложение есть, а упрощения - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 23:08 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34138896&tid=1590349]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 403ms |

| 0 / 0 |
