On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 14
Зарегистрирован: 22.09.09
ссылка на сообщение  Отправлено: 17.02.11 12:38. Заголовок: Harbour + SQL


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 136 , стр: 1 2 3 4 5 6 7 All [только новые]







Пост N: 180
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.11.19 17:35. Заголовок: rvu пишет: Как мини..


rvu пишет:

 цитата:
Как минимум я к нему подключился и нужную мне информацию забрал.



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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7137
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.11.19 17:40. Заголовок: rvu пишет: Как бы э..


rvu пишет:

 цитата:
Как бы это сделать?


Погуглить можно......например вот

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 181
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.11.19 18:39. Заголовок: C#.....


C#...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 182
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 14.11.19 08:29. Заголовок: В итоге то что нужно..


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3895
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.11.19 12:04. Заголовок: rvu пишет: Но в иде..


rvu пишет:

 цитата:
Но в идеале было бы на харборе это сделать.



Можно использовать AdoRDD
Можно работать с базой через механизм Ole, вызывая те же методы, что в примере по ссылке

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 196
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 13.12.19 15:19. Заголовок: Очередные проблемы с..


Очередные проблемы с MSSQL.

Забираю себе данные из него. Если таблица довольно большая, то моя программа отваливается. Просто валится без всяких сообщений об ошибке.
Критично не число записей, а именно размер таблицы. Т.е. если полей больше, то и отвалится программа при меньшем числе записей.

Вопрос даже не в том, как этого избежать, хотя это было бы здорово. Но можно ли как-то само событие отследить, предупредить сваливание программы?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1403
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.12.19 20:21. Заголовок: rvu пишет: Если та..


rvu пишет:

 цитата:
Если таблица довольно большая, то моя программа отваливается.


А вы читаете всю таблицу одним запросом?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 197
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 13.12.19 20:50. Заголовок: alkresin пишет: А в..


alkresin пишет:

 цитата:
А вы читаете всю таблицу одним запросом?



Я подключаюсь, как в этом примере:

rvu пишет:

 цитата:
\MiniGUI\SAMPLES\Advanced\MSSQL\



Затем работаю с таблицей, будто она dbf. Забрал данные из записи, skip и далее.

А как надо? Я просто другого не нашел.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1404
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.12.19 09:32. Заголовок: Посмотрел этот приме..


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

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 1508
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.19 11:11. Заголовок: alkresin пишет: одн..


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1405
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.12.19 12:29. Заголовок: Да, конвертации, вро..


Да, конвертации, вроде, нет - это я поторопился. Но все остальное - в силе. Проблема в этом предложении:

DBUSEAREA( .T.,"SQLMIX", "SELECT * FROM "+Win1.txtTable.value, "table" ,,,,nSQLConnection )

Как я понял из rddsql/readme.txt, при этом выкачиваются сразу все записи (в исходники их лезть неохота, чтобы проверить) - это и ожидаемо, иначе программа не вылетала бы.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3001
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.12.19 13:25. Заголовок: rvu пишет Я подключа..


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), но это, лениво, обошелся бы в большинстве случаев выборкой как сказал выше. Кроме просмотра есть и др. операции, т.е. для каких целей выборка.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 199
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 16.12.19 16:09. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. для каких целей выборка



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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1575
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.12.19 17:28. Заголовок: rvu пишет: могу их ..


rvu пишет:

 цитата:
могу их и кусками забрать


Конечно кусками. Весь смысл SQL в оптимальных запросах.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3002
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.12.19 20:08. Заголовок: rvu пишет Лично мне ..


rvu пишет
 цитата:
Лично мне нужно просто разово забрать все данные из базы sql. Дальше уже работаю с файлом dbf.


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 200
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 17.12.19 08:08. Заголовок: SergKis пишет: Резу..


SergKis пишет:

 цитата:
Результат можно получать в xml или txt файлах и заливать в dbf для работы.



Это лишнее движение будет. Я запросом в sql делаю нужную мне выборку во временную таблицу, из нее напрямую перекачиваю данные в dbf.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 136 , стр: 1 2 3 4 5 6 7 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 237
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет