Форум » [x]Harbour » Harbour + SQL » Ответить

Harbour + SQL

S-A-N: Начальство "наклоняет" переходить на MS SQL. В связи с этим вопросы: 1. Как с этим работает Harbour? 2. Есть ли какие-нибудь "грабли"? хитрости? 3. М.б. кто посоветует альтернативу? Речь идет о переводе всех баз данных предприятия (бухгалтерия, кадры, планово-экономический отдел). Все программы самописные - Clipper 5.2 (DOS), Clipper 5.2 + FW 1.9, Harbour + MiniGUI. О покупке чего-либо речь не идет. Начальство ратует за MS SQL Express Edition или "бесплатный брендовый аналог". Хотелось бы услышать ваше мнение.

Ответов - 136, стр: 1 2 3 4 5 6 7 All

rvu: rvu пишет: Как минимум я к нему подключился и нужную мне информацию забрал. Понадобилось забрать рисунки из MSSQL 2000, тип поля image и не знаю как. Даже не обязательно забрать в харборовскую базу, можно просто файлом рисунка, так даже лучше. Как бы это сделать?

Dima: rvu пишет: Как бы это сделать? Погуглить можно......например вот

rvu: C#...


rvu: В итоге то что нужно, сделал на дельфи. Коллега нашел свою старую программу, которую я подправил под свои нужды. А C# у нас с ним так и не пошел. Та программа не заработала, а быстро разобраться с ней не смогли. Но в идеале было бы на харборе это сделать.

Pasha: rvu пишет: Но в идеале было бы на харборе это сделать. Можно использовать AdoRDD Можно работать с базой через механизм Ole, вызывая те же методы, что в примере по ссылке

rvu: Очередные проблемы с MSSQL. Забираю себе данные из него. Если таблица довольно большая, то моя программа отваливается. Просто валится без всяких сообщений об ошибке. Критично не число записей, а именно размер таблицы. Т.е. если полей больше, то и отвалится программа при меньшем числе записей. Вопрос даже не в том, как этого избежать, хотя это было бы здорово. Но можно ли как-то само событие отследить, предупредить сваливание программы?

alkresin: rvu пишет: Если таблица довольно большая, то моя программа отваливается. А вы читаете всю таблицу одним запросом?

rvu: alkresin пишет: А вы читаете всю таблицу одним запросом? Я подключаюсь, как в этом примере: rvu пишет: \MiniGUI\SAMPLES\Advanced\MSSQL\ Затем работаю с таблицей, будто она dbf. Забрал данные из записи, skip и далее. А как надо? Я просто другого не нашел.

alkresin: Посмотрел этот пример - да, там действительно одним запросом берется вся база и конвертится в dbf. Это, конечно, самый простой способ, но ... Помимо того, что это не будет нормально работать на сколько-нибудь больших базах, это крайне неэффективно и противоречит самому смыслу использования клиент-серверной технологии. Подумайте: чтобы найти и посмотреть несколько записей, вы скачиваете с сервера всю базу. Если вам нужен обязательно browse всей базы, забирайте с сервера по частям - те куски, что будут сейчас на экране, может, с небольшим запасом. Я не знаком с minigui и его browse, но там должны быть какие-то обработчики, блоки кода, чтобы контролировать чтение данных из источника. В качестве примера, чтобы посмотреть, о чем речь, могу порекомендовать свой менеджер для sqlite: https://github.com/alkresin/dbc_sqlite. Это, естественно, на hwgui, но общая концепция от gui не зависит.

Haz: alkresin пишет: одним запросом берется вся база и конвертится в dbf Тоже пример посмотрел. Вроде нет там конвертации ни частями , ни целиком. Все в рамках идеологии клиент-сервер 1) Connect он и в любом сервере коннект 2) Create - тоже 3) Fill - обычный SQL запрос Insert into построчно 4) Browse - есть о чем поговорить , но для данного примера все правильно а поговорить вот о чем: SELECT * не всегда нужно , действительно лучше определенные поля и именно те которые нужны , запрос короче, выполняется быстрее , трафик меньше и тд. ( в этом примере нужны все ) BROWSE - не всю базу тащит сразу , а только на количество записей в окне самого бровса и не принципиально сколько там миллионов записей в базе, подкачка будет динамической если это бровс , а не грид по заранее заполняемому массиву. из подводных камней - только то что при навигации в пределах окна данных, бровс каждую запись дергает несколько раз ( во всяком случае TSBrowse из MG ), второй камень , это в бровсе подстановка данных ( вместо поля с ID , показываем значение из справочника ). И эти камни не относятся к SELECT * 5) и обычный Disconnect То что по частям бровсить может быть оптимальнее согласен, но в паре с кешированием этой части на клиенте и при плохом канале. При поиске разумеется SELECT cField WHERE cCondition, а не SELECT * и потом WHILE !cCondition

alkresin: Да, конвертации, вроде, нет - это я поторопился. Но все остальное - в силе. Проблема в этом предложении: DBUSEAREA( .T.,"SQLMIX", "SELECT * FROM "+Win1.txtTable.value, "table" ,,,,nSQLConnection ) Как я понял из rddsql/readme.txt, при этом выкачиваются сразу все записи (в исходники их лезть неохота, чтобы проверить) - это и ожидаемо, иначе программа не вылетала бы.

SergKis: rvu пишет Я подключаюсь, как в этом примере: \MiniGUI\SAMPLES\Advanced\MSSQL\ В работе не использовал бы схему этого примера в лоб. Выборки получал бы в MEMIO\DBF или array для показа в TBROWSE\BROWSE с использованием WHERE и LIMIT, т.к. после WHERE может быть много записей и та же фигня Критично не число записей, а именно размер таблицы. Т.е. если полей больше, то и отвалится программа при меньшем числе записей. Для работы с DBUSEAREA( .T.,"SQLMIX", "SELECT * FROM "+Win1.txtTable.value, "table" ,,,,nSQLConnection ) ( дополненной WHERE LIMIT ) на TBROWSE вешал бы обработчики (можно кнопки) листания (смены LIMIT), но это, лениво, обошелся бы в большинстве случаев выборкой как сказал выше. Кроме просмотра есть и др. операции, т.е. для каких целей выборка.

rvu: SergKis пишет: т.е. для каких целей выборка Лично мне нужно просто разово забрать все данные из базы sql. Дальше уже работаю с файлом dbf. Собственно, для этих целей я могу их и кусками забрать, а потом уже у себя склеить. Так что сейчас мне не критично разобраться в этом, это потом для красоты процесса можно.

PSP: rvu пишет: могу их и кусками забрать Конечно кусками. Весь смысл SQL в оптимальных запросах.

SergKis: rvu пишет Лично мне нужно просто разово забрать все данные из базы sql. Дальше уже работаю с файлом dbf. Тогда, возможно, достаточно утилиты типа isql.exe (в mysql, fb есть, должна быть и для mssql). Запрос SELECT * FROM ... должен работать точно. Результат можно получать в xml или txt файлах и заливать в dbf для работы. Для команд INSERT, UPDATE, ... так же можно исп. эту утилиту. Работает быстро и работа в фоне ... тоже свои ++

rvu: SergKis пишет: Результат можно получать в xml или txt файлах и заливать в dbf для работы. Это лишнее движение будет. Я запросом в sql делаю нужную мне выборку во временную таблицу, из нее напрямую перекачиваю данные в dbf.



полная версия страницы