Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Здравствуйте. При создании приложения с базой данных которая будет вмещать в себя порядка 50000 строк, возникла проблема что создаются дубли. Есть база в которой есть 4 колонки |ИМЯ|КОД|ОПИСАНИЕ|ССЫЛКА| сравнение должно происходить по коду, он универсальный. Я создаю файл импорта и загружаю. В первом файле есть Имя и код, во втором Код, описание, ссылка. Как сделать так чтоб в базу лились только те строки которых нет по коду а те которые есть не удаляло, а добавляло поля которых еще нет в базе.
Дело в том что здесь скорее всего придется перебором в самой базе, а можно экспортировать записи в файл, там отсортировать и после импортировать обратно.
Даю исходник всего проекта. Там есть тестовая база и 2 файла пуб. Весь основной функционал взаимодействия с БД в файле миксер.
Добавлено (10 Января 2014, 22:45) --------------------------------------------- Импорт данных из CSV в базу с настройкой соотношения номера колонки с колонкой БД.
Спасибо огромное. Увидел решение которое до этого в упор пропускал. Чистка базы хорошая но есть 1 но... Для моего примера необходимо чтоб удалялись те строки где меньше информации. Но это не столь важно.
Важнее всего кнопка Обработать2, в ней нет функции обновления строк. Например есть 1 файл в котором 3 колонки имя, код и описание, а во втором всего 2 код и ссылки. остается вопрос как сделать чтоб поля не пропускались а добавлялись данные в колонку ссылки. и получалась цельная полноценная база.
Добавлено (11 Января 2014, 03:45) --------------------------------------------- И еще если можно, удалите вложения пожалуйста.
Често говоря, я - тоже. Насколько я сумел плнять из первого сообщения, требуется не просто удаление дубликатов, а объединение полей по коду, т.е. суммирование в одной записи данных из двух записей. Если так, то
Цитатаwi1w ()
как сделать чтоб поля не пропускались а добавлялись данные в колонку ссылки. и получалась цельная полноценная база.
находить дубликаты записей по полю кода, сравнивать содержимое остальных полей на пустоту, и в пустое поле добавлять данные из поля заполненного, затем оставлять ту запись, которая заполнялась, а другую - удалять.
Все бы хорошо, но... обрабатывать:
Цитатаwi1w ()
порядка 50000 строк
это... гм... для NB, мягко говоря, длительная процедура.
Добавлено (11 Января 2014, 03:55) ---------------------------------------------
Цитатаwi1w ()
удалите вложения пожалуйста.
Удалил. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Да, но можно пойти другим путем. Работать с текстовым файлом а не с базой. Здесь еще всего не известно что требуется, как и при каких условиях.
ЦитатаPeter ()
порядка 50000 строк
Проблема не в нб а в мощности компьютера. НБ посредник на сколько я понимаю. И все будет обрабатываться до тех пор пока у компа памяти хватит.
ЦитатаPeter ()
сравнивать содержимое остальных полей на пустоту,
А если поле не пустое, а просто не достаточно информации? По количеству символов?
Тут у него еще много недопонимания. Но ничего, я тоже когда то с базы начинал. Самое то для понятия НБ, плагины простые в понимании и хелп хороший. И касаться приходится практически всех возможностей НБ.
Сейчас открыл NeoBookDB, детский лепет по сравнению с NeoBookDBPro. Хотя для общих целей все есть. NeoSoft молодцы конечно.
ЦитатаPeter ()
для NB, мягко говоря, длительная процедура.
Да и добавлятся то будут как я понимаю не 50000 записей, а партиями. Мож 10, мож 50. А это семечки. Не хочешь читать хелп?
НБ посредник на сколько я понимаю. И все будет обрабатываться до тех пор пока у компа памяти хватит.
Тут дело скорее не в мощности компа, а в том, как необушный интерпретатор работает с большими объемами данных. Обрати внимание - у NB скорость обработки данных в цикле существенно, и главное - непропорционально, зависит от количества итераций цикла, т.е. NB заметно быстрее обработает 10 циклов по 100 итераций каждый, чем один в 1000, и чем длиннее будет цикл, тем падение скорости будет больше, и в конце-концов, приложение может просто зависнуть. Похожая ситуация и со StrParse. С чем это точно связано трудно судить.
В качестве иллюстрации: помнишь в этом чуде в перьях под названием zmFunctions имеется команада поиска файлов? Когда файлов немного, то все ОК, но когда файлов набегает этак 5000 проект подвисает на секунду-другую, а подвисает он на работе интерпретатора, который и выводит непосредственно результат в проект (сам поиск в плагине отнимает приблизительно процентов 5-10 от всего времени работы команды, и для проекта это проходит совершенно незаметно).
Цитатаmishem ()
А если поле не пустое, а просто не достаточно информации?
Цитатаwi1w ()
В первом файле есть Имя и код, во втором Код, описание, ссылка.
Цитатаmishem ()
Но ничего, я тоже когда то с базы начинал.
Когда-то даже был момент, что приходилось тебя убеждать в полезности использования баз.
Цитатаmishem ()
а партиями. Мож 10, мож 50. А это семечки.
Если так, то да.
А в общем:
Цитатаmishem ()
Тут у него еще много недопонимания.
тоже верно. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
wi1w, к сожалению, как и было упомянуто, разобраться в вашем исходнике проблематично. В то же время, беглый осмотр кода указанной кнопки (кстати, она в ПРАВОМ углу, а не в левом) вызывает такие соображения: сначала вы получаете число записей в базе:
Обратите внимание: в переменной [dbfQueryResult] содержатся не позиции, а общее количество найденных записей
Код
Loop "1" "[dbfQueryResult]-1" "[J]"
вот здесь, перед удалением записи, требуется перейти на эту запись, т.е. сделать запись текущей, потому-что команда:
Код
dbfDeleteRecord "[PubDir]prices.dbf"
удаляет текущую активную запись
Я бы вообще использовал dbfFind и dbfFindNext без применения вложенного цикла, так проще - открыл базу, пробежался по ней "насквозь", поудалял соответствующие записи, и закрыл.
Код написан из башки, без проверки, точно не помню что возвращает dbfGetRecordNumber, если ничего не найдено, проверять надо. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Тут то и возникает ошибка что неверный синтаксис Query
Что зеачит неверный? Вы же сами составляете условие запроса. Воспользуйтесь отладчиком в пошаговом режиме для обнаружения ошибки, это - самый надежный вариант.
Нужные подсказки вам уже были дадены, остальное - за вами. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Тут то и возникает ошибка что неверный синтаксис Query
кавычки?! проверь тип поля, если он имеет тип - текст, то будет ошибка, т.к. ты передаешь тип - число. По моему я не работал с плагином dbfХХХ, но дкмаю что всетаки там тоже есть типы, а в sql-запросах это надо учитывать. Кстати а он поддерживает чистые sql-запросы?!
Тут то и возникает ошибка что неверный синтаксис Query
Значит не верный синтаксис.В моем примере свои поля, у тебя свои. Здесь просто скопировать пример не получится, надо еще понять и подставить свои значения.
kod==[i]
В моем случае поле с именем kod должно точно совпадать со сравниваемым == именно это обозночает. Почитай справку по поиску. Благо она есть на русском. Не хочешь читать хелп?
в примере mishem, поля код были идентичны номеру записи в БД У меня же
Примите за правило: никогда не применять вслепую чужой код. На форуме предлагаемый код, большей частью, лишь показывает возможное направление (идею) , а не готовое решение.
Цитатаwi1w ()
удалить вложения
ОК.
Цитатаmishem ()
По моему нет, но точно не уверен. Не пробовал
Нет, не может. Да и что касаемо типа полей... В NB это достаточно условно, т.к. в принципе NB работает только с одним типом данных - String, остальные типы для NB просто игра слов. А разбиение полей по типам сделано только из соображений совместимости баз с другими приложениями.
Фактически, реальная нечувствительность к типам данных - одна из причин тормознутости NB, как и любого скриптового языка, поскольку параметры команд (функций), имена функций и проч. для рельных вычислений должны быть преобразованы в соответствующие типы, а потом требуется обратное преобразование уже результата в строковый тип. И все эти преобразования интерпретатор производит строчку за строчкой обрабатываемого скрипта. Небыстро получается, однако... Но, для простого пользователя удобно - не надо задумываться о совместимости типов, необходимости их преобразования и т.п.. Пиши что хочешь: TRUE, Вася, 1653545 - NB все проглотит. А за все приходится платить. За простоту и удобство - тоже.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться