|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ??? Смысл в том чтобы передать таблицу на сервер не по отдельной записи, а сразу всю таблицу для последующих операций уже внутри сервера. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2011, 21:50 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, XML? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2011, 22:54 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Игорь ГорбоносПитон33, XML? Конкретный пример можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2011, 23:34 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, я не работал с MySql и не знаю его возможностей для работы с XML, через XML я общаюсь с MSSQL и пример могу дать для MSSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 01:06 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Игорь ГорбоносПитон33, я не работал с MySql и не знаю его возможностей для работы с XML, через XML я общаюсь с MSSQL и пример могу дать для MSSQL Дайте пример тогда для MSSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 01:22 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ??? Смысл в том чтобы передать таблицу на сервер не по отдельной записи, а сразу всю таблицу для последующих операций уже внутри сервера. Как это сделать?Для начала неплохо бы выяснить а что, собственно, имеет MySQL для таких действий? Есть ли в нем возможность "одной командой" закачать таблицу? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 10:08 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Игорь ГорбоносПитон33, я не работал с MySql и не знаю его возможностей для работы с XML, через XML я общаюсь с MSSQL и пример могу дать для MSSQL Дайте пример тогда для MSSQL? 1. Клиент 1.1. Выбираем необходимы поля и записи из курсора и сохраняем в новый курсор: Код: plaintext
Код: plaintext 1. 2.
Код: plaintext 1. 2.
2. Сервер Код: 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. 31. 32. 33. 34. 35.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 10:13 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Алексей, а почему не использовать закачку в MS SQL напрямую подключившись к нужной таблице? Ну, там через Linked Server или запросом через OpenRowSet()? Зачем нужен посредник в виде файла XML? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 11:02 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМАлексей, а почему не использовать закачку в MS SQL напрямую подключившись к нужной таблице? Ну, там через Linked Server или запросом через OpenRowSet()? Зачем нужен посредник в виде файла XML? Так это не ко мне вопрос! Питон33 спрашивал как из VFP проделать такую операцию. А если надо именно закачать данные из DBF на сервер, то Вы совершенно правы! Я бы использовал SSIS пакет (если надо проделывать это регулярно) или OpenRowSet (если не нет). Сам VFP для этого не нужен. С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 11:45 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Aleksey-KВладимирМАлексей, а почему не использовать закачку в MS SQL напрямую подключившись к нужной таблице? Ну, там через Linked Server или запросом через OpenRowSet()? Зачем нужен посредник в виде файла XML? Так это не ко мне вопрос! Питон33 спрашивал как из VFP проделать такую операцию. А если надо именно закачать данные из DBF на сервер, то Вы совершенно правы! Я бы использовал SSIS пакет (если надо проделывать это регулярно) или OpenRowSet (если не нет). Сам VFP для этого не нужен. С уважением, Алексей Нужно именно из VFP! К примеру, подготовить записи в программе VFP и передать их одним махом на сервер. Теперь возникает второй вопрос: Какой метод будет работать быстрее - через ODBC в цикле обновлять по одной записи, или формируя громадный XML и потом пересылать его на сервер, да потом там ещё проделывать с ним операции? В общем интересует скорость. Какой же всё-таки из методов самый быстрый для 500 000 записей DBF. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 15:53 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Aleksey-Kпропущено... Так это не ко мне вопрос! Питон33 спрашивал как из VFP проделать такую операцию. А если надо именно закачать данные из DBF на сервер, то Вы совершенно правы! Я бы использовал SSIS пакет (если надо проделывать это регулярно) или OpenRowSet (если не нет). Сам VFP для этого не нужен. С уважением, Алексей Нужно именно из VFP! К примеру, подготовить записи в программе VFP и передать их одним махом на сервер. Теперь возникает второй вопрос: Какой метод будет работать быстрее - через ODBC в цикле обновлять по одной записи, или формируя громадный XML и потом пересылать его на сервер, да потом там ещё проделывать с ним операции? В общем интересует скорость. Какой же всё-таки из методов самый быстрый для 500 000 записей DBF. А вы сами как думаете? 500 000 команда послать на сервер или одну! Что быстрее? Даже если учесть избыточную "болтливость" формата XML для "проской" таблицы, то все равно ответ на ваш вопрос, как мне кажестся, очевиден! С уважением, Алексей P.S. А если еще учесть возможные требования транзакционной целостности добавления ?! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 16:08 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Ну, надо же и самому иногда думать Вы хотите закачать данные в некую БД. Очевидно, лучше всего и быстрее всего будет использование групповых команд импорта этой самой БД. Следовательно, идете в форум по MySQL на этом сайте и выполняете поиск разных способов импорта данных. Скорее всего, там есть что-нибудь и про импорт из DBF. Я просто не в курсе, поскольку не работал с MySQL. Далее встает вопрос, как запустить эту операцию импорта. Очевидно, надо "попросить" MySQL это сделать. Можно ли это сделать из среды FoxPro? А это уже зависит от выбранного способа импорта и возможностей драйвера ADO или ODBC. Ведь "просить" Вы будете через эти драйвера. PS: Время импорта зависит не столько от количество записей, сколько от общего объема информации (в байтах), которое требуется передать на сервер. Ну, и от способа передачи, разумеется. Кстати, можете попробовать создать CursorAdapter и поиграться его свойством BatchUpdateCount. По сути, это будет аналог передачи нескольких команд Insert-SQL в одном пакете. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 16:15 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Aleksey-K, Вы мне можете без намёков - а ясно и понятно описать недостатки и преимущества вашего метода? Просто на форуме есть люди которые ваших намёков не поймут! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 16:17 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, одной командой - нет, только если это не вызов функции "ZalitTablicuNaServerBystroIBezOshibok" :) Выгрузите dbf в csv, соединитесь с сервером, загрузите через load data. Если есть спецсимволы, выгружайте через delimited ... with delimiter, а в load data придётся прописать ещё пару параметров. Всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 16:46 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМКстати, можете попробовать создать CursorAdapter и поиграться его свойством BatchUpdateCount. По сути, это будет аналог передачи нескольких команд Insert-SQL в одном пакете. тссс, только там, - на фоксклабе не рассказывайте, а то там целое пАкАление писало немыслимые коды по формированию пакетов относительно МС СКЛ от себя: CAD, пакеты строк + sqlExec, для Sql2005 bulkxmlload.prg (Doug Hennig/ upsize wizard - в проекте апсайзвизарда - это для автора примера с иксэмеэль будет полезно) + пример через "мульку-парамульку" (встречался в моей практике) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 17:08 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
прошелмимо, В тексте программы есть такая фраза * чтобы работало, - установить VFPODBC.msi Это к чему ваще?? Разве он нам нужен для работы с MySQL на линухе? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 18:04 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
+ все-же примерчик от Дага Хеннига через ком-компонент для мс скл ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 18:05 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33прошелмимо, В тексте программы есть такая фраза * чтобы работало, - установить VFPODBC.msi Это к чему ваще?? Разве он нам нужен для работы с MySQL на линухе? гы, хто такой твой линух и тем паче майискюэль - мне не известно - выкручивайся сам а примеров я накидал патаму, что от тя поступила такая вводная: Питон33Дайте пример тогда для MSSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 18:08 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, из всех - вы более грамотно описали процесс. Не могли бы конкретные примеры дать? На счёт "Попросить мускул" закачать xml тоже поподробнее. Дело в том что в мускуле нет ни каких дополнительных процедур и писать их никто не будет. У нас много клиентов и каждому объяснять как залезть в мускул, да ещё что-то там писать - это очень тяжело. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 18:14 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Ну, я не работал с MySQL поэтому синтаксис сказать не могу. Надо спрашивать на форуме MySQL. Есть ли там такое вообще. Ну, а чисто теоретически как "просить сервер"? Если установка соединения через ODBC, то это команда SQLExec(). Для MS SQL, например, это примерно так Код: plaintext
Если соединение установлено через ADO, то, соответственно, надо будет создавть COM-объекты вроде ADO.Command и формировать соответствующие команды. Наконец, вероятно, Вы этот момент не вполне поняли, но можно в одном пакете передавать несколько команд. Примерно так Код: plaintext 1. 2. 3. 4.
Надо только уточнить, каким символом разделяются команды в среде MySQL. Будет ли достаточно пробела (как в приведенном примере) или надо что-то еще ставить. Например, точку с запятой или перевод строки Кроме того, в данном варианте, как правило, есть ограничение на размер подобного пакета. Т.е. на количество символов в переменной strCommand. Обычно где-то в районе 8К, но опять же надо уточнять по документации драйвера Примерно это и реализует настройка BatchUpdateCount, если Вы организуете взаимодействие с сервером через объект CursorAdapter. Т.е. Вы работаете с CursorAdapter как с обычной таблицей FoxPro, а он внутри себя сам сформирует нужные пакеты и пошлет их на сервер. И наконец, если задача разовая, то стоит ли вообще заморачиваться оптимизиацией? 500 тысяч строк закачается относительно быстро. Не думаю, что будет дольше, чем минут 10..20 при самом худшем раскладе PS: Можно пойти по пути создания командных файлов. Т.е. пользователь должен сформировать определенный файл и положить его в определенную директорию (пункт меню в приложении). Затем формируется командный файл и запускается через RUN. Но, опять же, если такое есть для MySQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 18:56 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, Дело в том что 500 000 записей по одной команде загонять в MySQL - длится сутки даже по localhost. В общем то вы меня навели одну на мысль: Делать наверно просто через SQLPREPARE() весь цикл операций по передаче. А затем дать SQLEXEC() всего один раз в конце и будет как мне кажется быстрее. (но это только предположение) Разница в скорости думаю будет существенной. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 20:05 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, это может быть быстрее, но реально быстрее будет через load data. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 20:13 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Дело в том что 500 000 записей по одной команде загонять в MySQL - длится сутки даже по localhost. "Не верю" (с) Не может такое относительно небольшое количество записей столько времени обрабатываться. Что-то Вы не договариваете. Какие-то у Вас идут дополнительные обработки не связанные с закачкой данных на сервер. Может, приведете пример кода, как Вы это делаете? Питон33Делать наверно просто через SQLPREPARE() весь цикл операций по передаче. А затем дать SQLEXEC() всего один раз в конце и будет как мне кажется быстрее. (но это только предположение) Да какой там план выполнения у команды вставки одной записи! Откуда возьмется ускорение-то? Впрочем, может это какая фича именно MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 23:35 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglir, Пример можно? load data нету такой команды в фоксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 23:37 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ"Не верю" (с) Не может такое относительно небольшое количество записей столько времени обрабатываться. Что-то Вы не договариваете. Какие-то у Вас идут дополнительные обработки не связанные с закачкой данных на сервер. Поверьте это так. 500 000 записей, по одной записи обновляются в цикле командой MySQL UPDATE по уникальному ключу. Процесс длится сутки. ВладимирМДа какой там план выполнения у команды вставки одной записи! Откуда возьмется ускорение-то? Впрочем, может это какая фича именно MySQL? Ускорение будет, так как выполняются все команды сразу, а не по отдельности SQLEXEC() Каждый раз SQLEXEC() ожидает ответа от сервера, иными словами 500 000 раз тормозит. SQLPREPARE() просто подготавливает для выполнения, а выполнение будет в самом конце по команде SQLEXEC(). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 23:48 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Дело в том что 500 000 записей по одной команде загонять в MySQL - длится сутки даже по localhost. Полный абзац! Меняйте "консерваторию"! Или там живёт ЧТО-ТО, о чём Вы не знаете! 2.5 млн. инсертов (просто инсерт и ничего больше) - 9-10 минут... не localhost, конечно! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 08:51 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Поверьте это так. 500 000 записей, по одной записи обновляются в цикле командой MySQL UPDATE по уникальному ключу. Процесс длится сутки. Есть подозрение что ключ условно ключем называется, а реально просто поле и индекса по нему нет. Проверь что есть индекс по этому полю. UPDATE это не вставка, а обновление данных. Гораздо быстрее выполнится один UPDATE полмиллиона записей, чем полмиллиона по одному. Поэтому лучше сначала создать временную таблицу на сервере, вставить туда данные, а потом UPDATE делать из нее. Чтобы сократить время на передачу данных серверу можно передавать по несколько команд серверу за одно обращение, как выше Владимир писал: Код: plaintext 1. 2. 3.
За раз полмиллиона инсертов не уйдет, т.к. у SQLExec есть ограничение на размер передаваемых данных. Питон33SQLPREPARE() просто подготавливает для выполнения, а выполнение будет в самом конце по команде SQLEXEC(). Сомневаюсь что это поможет. Как я понимаю SQLPREPARE() подготавливает только план выполнения запроса. Способы быстрой вставки зависят от типа SQL-сервера, поэтому лучше в форуме по MySQL-ю спросить. PS Фокс заточен под MSSQL, с остальными SQL-серверами часто бывают проблемы на ровном месте из-за неполной совместимости с ODBC драйвером, поэтому советую попробовать несколько разных драйверов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 09:29 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33tanglir, Пример можно? load data нету такой команды в фоксе.Разумеется нет. Это же не в фокс надо грузить. Это на сервере надо смотреть. Вам уже намекали про участие обоих сторон в процессе. Не в одном фоксе дело, надо чтоб и сервер умел "одной командой" грузить большое количество данных. Load data как раз серверная команда из этой серии. На MySQL она есть? Или что-то подобное? Наверняка что-то должно быть. Ну так и надо сначала узнать необходимые для использования этой возможности условия и посмотреть возможность выполнения этих условий с помощью фокса. Все остальные варианты являются маскировкой многочисленных insert. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 10:01 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
с курсорадаптером сами пример найдете? или рисовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 10:14 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
RedrikПитон33Дело в том что 500 000 записей по одной команде загонять в MySQL - длится сутки даже по localhost. Полный абзац! Меняйте "консерваторию"! Или там живёт ЧТО-ТО, о чём Вы не знаете! 2.5 млн. инсертов (просто инсерт и ничего больше) - 9-10 минут... не localhost, конечно! UPDATE работает дольше чем INSERT так как она ещё и ищет запись по ключу прежде чем обновить. Согласен что можно ускорить процесс, так как там интерфейсная часть ещё и всякие рефреши в окне, да и комп слабоват. Но всё равно я думаю через SQLPREPARE() будет пошустрее если их пачкой сперва выдать и в конце SQLEXEC(). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 10:28 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
прошелмимос курсорадаптером сами пример найдете? или рисовать? Нарисуй, только условие я написал - на сервере Ни каких программ устанавливать не будут - это исключено. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 10:32 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33tanglir, Пример можно?вот кусок примера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 11:35 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33ВладимирМ"Не верю" (с) Не может такое относительно небольшое количество записей столько времени обрабатываться. Что-то Вы не договариваете. Какие-то у Вас идут дополнительные обработки не связанные с закачкой данных на сервер. Поверьте это так. 500 000 записей, по одной записи обновляются в цикле командой MySQL UPDATE по уникальному ключу. Процесс длится сутки. Мы так будем еще месяца два обсуждать. То Вы заявляете, что Вам надо всего-лишь закачать таблицу DBF в базу MySQL, то теперь вдруг выясняется, что Вы выполняете какую-то модификацию. Поскольку Вы не можете внятно объяснить, что же именно Вы делаете, я и предлагаю Вам привести код выполняемых операций. Тогда и советы по оптимизации будут более предметными. Питон33ВладимирМДа какой там план выполнения у команды вставки одной записи! Откуда возьмется ускорение-то? Впрочем, может это какая фича именно MySQL? Ускорение будет, так как выполняются все команды сразу, а не по отдельности SQLEXEC() Каждый раз SQLEXEC() ожидает ответа от сервера, иными словами 500 000 раз тормозит. SQLPREPARE() просто подготавливает для выполнения, а выполнение будет в самом конце по команде SQLEXEC(). Похоже, Вы не понимаете, что именно делает сервер и для чего нужна команда SQLPrepare(). Любой сервер (любая СУБД) прежде, чем выполнить какую-либо команду предварительно строит план ее выполнения для того, чтобы выбрать наиболее оптимальный (наиболее быстрый) способ ее выполнения. Таким образом, выполнение команды разбивается на 2 этапа - Формирование плана выполнения команды - Собственно выполнение по сформированному плану Так вот, команда SQLExec() выполняет обе эти операции. А SQLPrepare() - это предварительное построение плана выполнения запроса без собственно выполнения. А последующая SQLExec() - причем определенного вида - просто использует этот план. Когда будет выгодно использование SQLPrepare()? Очевидно, при выполнении множества однотипных запросов (множество SQLExec() в цикле), для которых один и тот же план выполнения будет наиболее оптимальным. При этом, разумеется, для конкретного SQL-сервера должна иметься принципиальная возможность разделить операцию построения плана и собственно выполнение команды Теперь, что именно Вы заявили с самого начала (что именно Вы делаете). Питон33КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ??? Любой человек работающий с базами данных однозначно интерпретирует подобную постановку задачи как Insert-SQL. Т.е. вставка новых записей. Не думаю, чтобы план построения команды на вставку записи отличался какой-либо сложностью и занимал много времени. Как следствие, SQLPrepare() в принципе не должен дать никакого заметного ускорения. Однако далее вдруг возникает упоминание о каких-то UPDATE, что совершенно не вяжется с заявленной в начале темы постановки задачи. Вам надо не "передать таблицу", а обновить информацию в талице MySQL данными из таблицы DBF. А это уже принципиально другая постановка задачи. Подобная задача в принципе не решается "одной командой". Никак. Никоим образом. Тут, как минимум, 3 этапа - Обновить записи, которые есть и в MySQL, и в DBF - Удалить записи, которые есть в MySQL, но нет в DBF - Создать записи, которых нет в MySQL, но есть в DBF Разумеется, чтобы выполнить сравнение таблицы MySQL и DBF их сначала необходимо "перелить" в общее хранилище. Либо DBF в некую временную таблицу MySQL, либо таблицу MySQL в таблицу DBF, либо их обоих в какое-то третье хранилище. А потом уже выполнять сравнение. Так ЧТО Вы хотите сделать? Не надо словами. У Вас не очень-то получается. Приведите код. Не обязательно командами. Можно просто описание этапов действий, примерно так: - Организуем цикл перебора записей в DBF - Для каждой записи DBF ищем запись в MySQL - Если нашли, то обновляем информацию - Если не нашли, то создаем новую запись в MySQL - (...) Вы ЭТО делаете или что-то другое? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 12:35 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ.... Подобная задача в принципе не решается "одной командой". Никак. Никоим образом. Тут, как минимум, 3 этапа - Обновить записи, которые есть и в MySQL, и в DBF - Удалить записи, которые есть в MySQL, но нет в DBF - Создать записи, которых нет в MySQL, но есть в DBF В Microsoft SQL 2008 решается. Теперь есть команда MERGE: Выполняет операции вставки, обновления или удаления для целевой таблицы на основе результатов соединения с исходной таблицей. Например, можно синхронизировать две таблицы путем вставки, обновления или удаления строк в одной таблице на основании отличий, найденных в другой таблице. А если такая команда в MySQL не знаю! С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 13:44 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, Вы просто переписали мои же слова. Если в цикле стоят команды UPDATE и выполняются 500 000 раз, тогда SQLPREPARE() совместно с SQLEXEC() будет работать быстрее чем просто SQLEXEC() Для этого подготавливаем группу команд для MySQL по средством SQLPREPARE() А в самом конце даём один раз SQLEXEC() Возникает вопрос: Сколько их всего таких команд можно и желательно посылать мускулу за один цикл через SQLPREPARE() ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 14:56 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
> Автор: Питон33 > Возникает вопрос: Сколько их всего таких команд можно и желательно посылать мускулу за один цикл через > SQLPREPARE() ? Спроси об этом в ветке по MySql. И, я присоединяюсь к мнению многих что у тебя что-то в консерватории не правильно, если апдейт пятисот тысяч записей занимает восемь часов. Что именно не правильно отсюда не видно, это может быть: отсуствие индекса по полю фильтрации тригера, выполняющие сложные вычисления или каскады тригеров серверное железо не справляется с нагрузкой загружен канал передачи данных ... комбинация вышеперечисленных причин Препарированием запроса ты вряд-ли "кардинально" улучшишь производительность. Тебе лучше пообщатся со специалистами в MySql на предмет как лучше реализовать массовые обновления. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:08 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglir, Я понял вашу мысль это тоже интересный способ. Т.е. как я понял: Load Data infile - это команда mysql которая попросит mysql закачать файл с моего компа? Не будет ли при этом комп задавать лишних вопросов пугая юзеров? Идея интересная, но реализация сложновата. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:09 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Тут вопрос и к фокспрошникам и к мускулистам. По-скольку мне надо закачать DBF на сервак, а работать с форматом MySQL. При этом нужно выбрать быстрый и удобный способ. Повторяю - на серваке никто никаких программ и модулей дополнительно устанавливать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:16 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
> Автор: Питон33 > Тут вопрос и к фокспрошникам и к мускулистам. Да, только мускулисты тусуются здесь , а фокспрошники тебе уже выдали все возможные рекомендации. Осталась только специфика MySql :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:22 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Вы просто переписали мои же слова. Если в цикле стоят команды UPDATE и выполняются 500 000 раз, тогда SQLPREPARE() совместно с SQLEXEC() будет работать быстрее чем просто SQLEXEC() Это предположение . Но далеко не факт, что именно так и будет. Питон33Для этого подготавливаем группу команд для MySQL по средством SQLPREPARE() А в самом конце даём один раз SQLEXEC() Не так. Вы опять ничего не поняли. Вот пример из справки FoxPro по команде SQLPrepare() Код: plaintext 1. 2. 3. 4. 5. 6.
Что требуется в Вашем случае - совершенно непонятно. Вы все время уходите в сторону не желая сознаться, что же Вы делаете. Вот я и прошу уже в который раз написать ЧТО Вы делаете? Питон33По-скольку мне надо закачать DBF на сервак, а работать с форматом MySQL. SQLPrepare() к этому вопросу вообще не имеет никакого отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:28 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33работать с форматом MySQL.C форматом Вам поработать не удасться. Вы можете поработать с сервером, отправляя ему команды и получая результаты отработки этих команд. Формата MySQL, впрочем как и формата MS SQL нет. Есть форматы хранения, которые пользователю сервера нафиг не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 15:47 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМНаконец, вероятно, Вы этот момент не вполне поняли, но можно в одном пакете передавать несколько команд. Примерно так Код: plaintext 1. 2. 3. 4.
Надо только уточнить, каким символом разделяются команды в среде MySQL. Будет ли достаточно пробела (как в приведенном примере) или надо что-то еще ставить. Например, точку с запятой или перевод строки Проверил, не работает ни точка с запятой, ни пробел. SQLPREPARE() тоже не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 16:40 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, в настройках соединения есть такая штука, как OPTION (числовое), один из параметров в нём называется "allow multiple statements". Поищите, значения параметров где-то даже тут были. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 17:01 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33ВладимирМНаконец, вероятно, Вы этот момент не вполне поняли, но можно в одном пакете передавать несколько команд. Примерно так Код: plaintext 1. 2. 3. 4.
Надо только уточнить, каким символом разделяются команды в среде MySQL. Будет ли достаточно пробела (как в приведенном примере) или надо что-то еще ставить. Например, точку с запятой или перевод строки Проверил, не работает ни точка с запятой, ни пробел. Плохо проверяли, да и ленитесь сами искать. Неоднократно же "посылали" на форум по MySQL. Поиск по фразе "несколько команд" сразу выдал ссылку http://dev.mysql.com/doc/refman/5.0/en/c-api-multiple-queries.html Т.е. разделителем команд является точка с запятой, следовательно синтаксис должен быть такой Код: plaintext 1. 2. 3. 4.
Однако предварительно надо дать понять MySQL, что один запрос может содержать несколько команд. Для этого в строке соединения указать опцию CLIENT_MULTI_STATEMENTS или указать эту опцию отдельной настройкой после установки соединения MySQLMySQL 5.0 also supports the execution of a string containing multiple statements separated by semicolon (“;”) characters. This capability is enabled by special options that are specified either when you connect to the server with mysql_real_connect() or after connecting by calling` mysql_set_server_option(). Питон33SQLPREPARE() тоже не помогает. И не должен помочь. Вам уже неоднократно объяснили, что SQLPrepare() вообще о другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 17:11 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, Как выглядит строка подключения с опцией MYSQL_OPTION_MULTI_STATEMENTS ? Я пробую не получается. Driver=MySQL ODBC 3.51 Driver;SERVER=***;UID=***;PWD=***;DATABASE=***;PORT=3306;MYSQL_OPTION_MULTI_STATEMENTS= чему равно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 18:35 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
> Автор: Питон33 > Как выглядит строка подключения с опцией MYSQL_OPTION_MULTI_STATEMENTS ? А с чего ты решил что эта опция должна быть в строке подключения? А может она устанавливается SqlPropSet(или как она там) ? А почему ты не читаешь документацию к используемому драйверу? А почему ты не спросишь, наконец, в форуме по MySql? .... А почему ты решил, что за тебя сделают всю работу? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 18:40 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Код: plaintext
Если ни это, ни чтение мануалов не поможет, тогда переходи на фвмас ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 18:51 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Потому что в документации написано: /* connect to server with the CLIENT_MULTI_STATEMENTS option */ if (mysql_real_connect (mysql, host_name, user_name, password, db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS) == NULL) { printf("mysql_real_connect() failed\n"); mysql_close(mysql); exit(1); } /* execute multiple statements */ Как написать строку подключения в фоксе? Я пробую не получается. Вернее подключение устанавливается но команды разделённые ; не принимает. Driver=MySQL ODBC 3.51 Driver;SERVER=***;UID=***;PWD=***;DATABASE=***;PORT=3306;MYSQL_OPTION_MULTI_STATEMENTS= чему равно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 18:54 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglir Код: plaintext
Если ни это, ни чтение мануалов не поможет, тогда переходи на фвмас Попробовал OPTION=MYSQL_OPTION_MULTI_STATEMENTS а так же OPTION=MYSQL_OPTION_MULTI_STATEMENTS_ON Не помогает. Не принимает команды разделённый точкой с запятой! По отдельности команды принимает и отрабатывает без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:01 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33, а создать файловый DSN и прочитать его, как я выше писал, попробовал? Обратить внимание на то, что OPTION в данном случае - это ЧИСЛО, попробовал? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:05 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglir, Создал, ищу теперь его куда она запихнула этот DSN. ппц... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:16 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglirПитон33, а создать файловый DSN и прочитать его, как я выше писал, попробовал? Обратить внимание на то, что OPTION в данном случае - это ЧИСЛО, попробовал? Нашёл! Но вы ни за что не догадаетесь! :) OPTION=67108864 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:26 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
tanglir, Ну вот теперь можно сказать один способ работает! Строка подключения будет выглядеть так: Driver=MySQL ODBC 3.51 Driver;SERVER=***;UID=***;PWD=***;DATABASE=***;PORT=3306;OPTION=67108864 Параметр 67108864 означает что будет MYSQL_OPTION_MULTI_STATEMENTS_ON - выполнение сразу нескольких команд. После этого подключения я успешно передал в MySQL сразу две команды разделённые ";" и добавил из фокса сразу две записи. Думаю это будет уже как минимум в два раза быстрее работать чем по одной записи! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:38 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33tanglirПитон33, а создать файловый DSN и прочитать его, как я выше писал, попробовал? Обратить внимание на то, что OPTION в данном случае - это ЧИСЛО, попробовал? Нашёл! Но вы ни за что не догадаетесь! :) OPTION=67108864 Когда решение найдено найти на него ссылки гораздо проще Оказывается надо было искать по ключевому слову FLAG_MULTI_STATEMENTS. Например, есть ссылки здесь http://www.sql.ru/forum/actualthread.aspx?tid=478429 67108864 = 2^26 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 19:41 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, Должен не согласиться с вами. Тема на которую вы дали ссылку слишком обобщённая. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:19 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33Должен не согласиться с вами. Тема на которую вы дали ссылку слишком обобщённая. Ну, в этой теме отмечены 2 момента 1. Перечислены значения OPTION для строки соединения и что они обозначают 2. Показан пример закачки таблицы в MySQL. Причем начиная с создания ее структуры и кончая формированием пакета команд на вставку многих записей. Правда, там надо поставить ограничитель на размер формируемой строки, чтобы можно было использовать и для данного случая. А так, фактически готовое решение для данной задачи. Один из вариантов решения, разумеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 23:31 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
ВладимирМ, Там у него сложный пример, разбираться долго, а тут мы понятно всё расписали. Наверняка кому нибудь пригодится. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 03:29 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Изучать PostgreSQL начал совсем недавно. Тоже встал вопрос об импорте данных из DBF на сервер SQL. Открыл для себя следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Все вроде должно работать, кроме тех случаев когда поле типа DATETIME, DATE, TIME (FoxPro) пусты. Вот тут то возникла у меня загвоздка. Как простым методом пустую строку преобразовать в пустую дату? Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 11:16 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Черт, что-то не особо вчитывался в заголовок темы. Тут же про MYSQL )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 11:22 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
BerlogaЧерт, что-то не особо вчитывался в заголовок темы. Тут же про MYSQL )) Ну ничего, откройте в этом форуме новый топик типа VFP2PostgreSQL и поделитесь решениями с программистами. Очень даже полезное дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 11:43 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
> Автор: Berloga > Все вроде должно работать, кроме тех случаев когда поле типа DATETIME, DATE, TIME (FoxPro) пусты. Вот тут то > возникла у меня загвоздка. Как простым методом пустую строку преобразовать в пустую дату? Скажу сразу, я не работаю с Postgree, но методы применяю одинаковые на других серверах. Во первых у меня нет "пустой строки" подразумевающей дату. Я всегда такие строки заменяю на Null И во вторых, я стараюсь не использовать "неявные" преобразования типов - в данном случае строк в дату, а всегда стараюсь писать явный cast к нужному типу данных. Из во-первых и во-вторых следует то что Null замечательно кастится к любому типу без ошибок, для отображения пользователю в самом фокспро есть например Код: plaintext
запросах, ну или функция coalesce на MSSQL и FB Насчет простого метода, я бы порекомендовал сделать Update всех записей содержащих пустую строку на Null, и изменить тип столбца на тип DATETIME. Это возможно повлечет за собой переделку приложения, но я считаю что это необходимый шаг :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 11:57 |
|
КАК ПЕРЕДАТЬ ВСЮ ТАБЛИЦУ DBF ОДНОЙ КОМАНДОЙ - ИЗ VFP В MYSQL ???
|
|||
---|---|---|---|
#18+
Питон33tanglir, Ну вот теперь можно сказать один способ работает! Строка подключения будет выглядеть так: Driver=MySQL ODBC 3.51 Driver;SERVER=***;UID=***;PWD=***;DATABASE=***;PORT=3306;OPTION=67108864 Параметр 67108864 означает что будет MYSQL_OPTION_MULTI_STATEMENTS_ON - выполнение сразу нескольких команд. После этого подключения я успешно передал в MySQL сразу две команды разделённые ";" и добавил из фокса сразу две записи. Думаю это будет уже как минимум в два раза быстрее работать чем по одной записи! Для тех кому интересна данная тема могу сообщить результаты эксперимента: 1. Оптимальный запрос на выполнение INSERT SQL: Рекомендую передавать в MySQL по 10000 записей одной командой, но не больше. 2. Скорость выполнения одной такой команды: Тестировалось без Мемо полей на сервере i5 - скорость составляет 0.2-0.8 сек, т.е. доли секунды! Зависит разумеется от количества передаваемых полей. Иными словами за один раз добавляется сразу 10000 записей в MySQL. В общем я очень доволен найденным решением и скорость работы с сервером теперь на несколько порядков выше. Всем удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2011, 04:04 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1584223]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 445ms |
0 / 0 |