Дмитрий так как от программирования я далек, но потихоньку учусь, такой вопрос - сегодня после чтения мануалов смог подключить MySQL сервер и у меня даже все начало подключаться и работать, но не смог @вкурить@, как потом осуществляется перенос созданной базы данных на мощности сервера (кратко в нескольких словах, только суть если можно) и если серверная часть подключена и созданы таблицы можно ли переключаться между MySQL и SQLITE?
127 2015-10-09 16:53:02
Re: Импорт из csv (28 replies, posted in Russian)
Дмитрий спасибо, ещё немножко поступил и получилось. Все заработало даже лучше, чем в лучших домах Парижа и Лондона. :-)
128 2015-10-09 12:57:27
Re: Импорт из csv (28 replies, posted in Russian)
Так разделитель столбцов используется ',' а разделитель '!' используется при экспорте для разделения строк в многострочном поле, и при импорте все заливается дословно - как есть в текстовом файле. Понимаю что туплю но как данный символ убрать при экспорте? Скрипт тогда должен по идее усложниться.
129 2015-10-09 11:09:48
Re: Импорт из csv (28 replies, posted in Russian)
Дмитрий, в данном случае (исправленном Вами варианте), все вроде бы как и работает, но есть одно но - в случае выгрузки средствами базы в текстовый файл, используются междустрочные разделители вида "|", и при заливке в базу все так и заливается "т.е. привет|медвед|и|так|далее". Это нужно что то с файлом сделать?
130 2015-09-21 14:48:36
Re: Импорт из csv (28 replies, posted in Russian)
Дмитрий спасибо, сверюсь. Вячеслав ещё помог, свой полёт прислал, путём разбора вроде тоже уже начал понимать где я тупил.
131 2015-09-21 10:39:48
Re: Импорт из csv (28 replies, posted in Russian)
Доброго дня всем. Дмитрий - никак у меня не получается добиться результата, даже попытался на основе скрипта выложенного в посте 12 создать формы, и если все равно не работает. Может глянете хотя бы программу которую собрал согласно поста -12. Что не так. Экспорт через грид в текстовый файл, при попытке импорта выводится например сообщение "обработано 13 строк", а в таблицы ничего не пишет.
132 2015-09-20 10:47:00
Re: Импорт из csv (28 replies, posted in Russian)
Странно - пытался импортировать эспортированный ранее файл из грида, по описанному вами методу , но результат тот же. наверное таки в скрипте проблема у меня.
133 2015-09-20 10:24:39
Re: Импорт из csv (28 replies, posted in Russian)
Дмитрий читал при переносы строк, в итоге пытался в csv менять разделитель "|" на "#13#10" - не помогло. Если не очень затруднит гляньте csv файл и кусок скрипта аналогичный выложенному но где я пытался вставить кусок примера Rebrovvv. строки кода из примера которые пытался вставлять отмечены "//++++++++++++++++++++++" . Никаких ошибок при работе не выдает, выводит что импортировано например 9 строк, но ничего более не происходит.
https://drive.google.com/file/d/0B1hkxd … sp=sharing
И еще можно закоментировать эти строки, никак полность не пойму их смысл:
begin
if (Length(sl[i])>0) and (sl[i][1]=';') then
begin
sLine := sLine + sl[i];
arrStr:= SplitString(sLine, ';');
if arrStr[0][1]=' ' then
Delete(arrStr[0], 1, 2);
134 2015-09-18 17:38:32
Re: Импорт из csv (28 replies, posted in Russian)
Давно Вас Дмитрий не терроризировал, а тут Кунар80 опередил, может Вы поможете, а может кто другой - суть в следующем имею рабочий скрипт по восстановлению базы из csv, но была проблема с переносом информации из поля memo, так как хранилась в многострочном виде, и сохраняло только кусок текста до переноса строки. Увидел эту тему, пытался применить пост выше на 1 от этого, так как я понял проблема была однотипная но никак ее решить у меня не получается, может окажете легкую помощь? (восстанавливать пытался в тесте данные экспортированные в ексель, а затем сохраненные в csv)
текст листинга с комментариями рабочего кода но с описанной выше проблемой:
информация для восстановления из поля memo хранится в строке if arrStr[4]<>'' then sPrimechanie := '"' + arrStr[4] + '"' else sPrimechanie := 'NULL';
procedure OTKAZNIE_MATERIALI_ImportVidMat_OnClick (Sender: string; var Cancel: boolean); ///ИМПОРТ ДАННЫХ ИЗ CSV ФАЙЛА ДЛЯ РЕАЛИЗАЦИИ ПЕРЕНОСА И БЭКАПА
var
OpenDialog: TOpenDialog; // объект для диалога выбора файла
sl: TStringList; // объект, представляющий из себя текстовый список
arrStr: array of string; // массив, в который будет возвращаться результат функции SplitString
sID: string; // ПЕРЕМЕННАЯ ID
i,c: integer; // числовые переменные для цикла
sVidMat: string; // переменная - вид материала
sMaterial: string; // переменная - номер материала
sGod: string; // переменная - год материала
sDataVidachi: string; // переменная - дата выдачи материала
sFio: string; // переменная - фио получателя
sSluzbi: string; // переменная - служба получателя
sPrimechanie: string; // переменная - примечение
sNavsegda: string; // переменная - если выдан навсегда, либо приобщен к чему либо
srecord_count: string;
sval: string;
sYesNo: string;
begin
OpenDialog := TOpenDialog.Create(OTKAZNIE_MATERIALI); // создаем диалог выбора файла
//OpenDialog.InitialDir := 'd:\Archive 1.01\ImportCSV'; либо можно изменить на фыбор по умолчанию
if OpenDialog.Execute then // запускаем диалог выбора файла, если результат выполенения True, значит файл был выбран
begin
sl := TStringList.Create; // создаем объект - текстовый список
sl.LoadFromFile (OpenDialog.FileName); // загружаем в него csv файл, который пользователь выбрал через диалог выбора файла
c := sl.Count - 1; // в переменной c будет содержаться количество строк в csv файле
for i := 0 to c do // запускаем цикл, чтобы пройтись по всем строчкам csv файла, который загрузили в объект sl (TStringList)
begin
arrStr := SplitString(sl[i], ';'); // sl[i] возвращает строку из csv файла, которую функция SplitString разделяет на столбцы. В данном csv файле в качестве разделителя столбцов используется знак ;
//if arrStr[0]<>'' then srecord_count:= '"' + arrStr[0] + '"' else srecord_count:= 'NULL';
//if arrStr[0]<>'' then sID := '"' + arrStr[0] + '"' else sID := 'NULL';
if arrStr[0]<>'' then sMaterial := '"' + arrStr[0] + '"' else sMaterial := 'NULL';
if arrStr[1]<>'' then sGod := '"' + arrStr[1] + '"' else sGod := 'NULL';
if arrStr[2]<>'' then // если данные есть
sDataVidachi := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[2])) + '"' // приводим дату к формату, который необходим для записи в БД
else sDataVidachi := 'NULL'; // иначе значение NULL
if arrStr[3]<>'' then sFio := '"' + arrStr[3] + '"' else sFio := 'NULL';
if arrStr[4]<>'' then sPrimechanie := '"' + arrStr[4] + '"' else sPrimechanie := 'NULL';
sSluzbi := SQLExecute ('SELECT id FROM sluzba WHERE sluzbi LIKE "' + arrStr[5] +'"'); // и
if sSluzbi = '' then sSluzbi := 'NULL';
sVidMat := SQLExecute ('SELECT id FROM vidmateriala WHERE vidmat LIKE "' + arrStr[6] +'"'); // и
if sVidMat = '' then sVidMat := 'NULL';
if arrStr[7]<> '' then
begin
if arrStr[7] = 'Да' then sYesNo :='1';
if arrStr[7] = 'Нет' then sYesNo :='0';
end else sYesNo:='NULL';
if arrStr[8]<>'' then srecord_count := '"' + arrStr[8] + '"' else srecord_count := 'NULL';
SQLExecute ('INSERT INTO OTKAZNIE ( [MATERIAL], [GOD], [DATA_VIDACHI], [FIO],[PRIMECHANIE],id_SLUZBA, id_VIDMATERIALA, [NAVSEGDA], [record_count]) VALUES ('+
sMaterial +','+ sGod +','+ sDataVidachi +','+ sFio +','+ sPrimechanie +','+ sSluzbi +','+ sVidMat +','+ sYesNo +','+ srecord_count + ');');
//проверяем, для избежания дубликатов, данная проверка не обязательна, и зависит от вашей ситуации
// sval := SQLExecute('SELECT id FROM otkaznie WHERE (Material = ' + arrStr[0] + ') AND (GOD = ' + arrStr[1] + ');');
// if sval = '' then // если в переменной sval - пусто, значит SQL запрос ничего не вернул, и дубликата данных нет
// SQLExecute ('INSERT INTO otkaznie (Material, GOD ) VALUES ('+ arrStr[0] + '), ('+ arrStr[1] + ');'); // с помощью SQL запрос вставляем данные в БД
OTKAZNIE_MATERIALI.ImportCSV.Caption := IntToStr(i) + ' of ' + IntToStr(c); // выводим в компонент надписи, какое количество строк с данными обработано
Application.ProcessMessages; // необходимо, чтобы надпись в Label один обновилась
end;
sl.Free; // уничтожаем объект, после работы с ним
OTKAZNIE_MATERIALI.REZULTAT.dbUpdate; // заставляем TableGrid обновить данные
end;
OpenDialog.Free; // уничтожаем объект, после работы с ним
end;
//procedure OTKAZNIE_MATERIALI_REZULTAT_OnColumnResize (Sender: string; ACol: Integer);
//begin
// OTKAZNIE_MATERIALI_REZULTAT_OnChange ('');
//end;
135 2015-07-23 11:17:27
Re: [Скрипт] Импорт CSV файла в базу (33 replies, posted in FAQ)
Ок. Спасибо. Как всегда выручаете. Пойду разбираться.
136 2015-07-23 06:34:36
Re: [Скрипт] Импорт CSV файла в базу (33 replies, posted in FAQ)
Дмитрий здравствуйте , опять я. Никак не могу понять как в данном варианте можно организовать импорт если поле имеет значение "дата" либо является словарём т.е. id_name. Ив предыдущих вариантах у меня все работает, но там сильно усложнённый код, с кучей ненужных переменных. Буду премного благодарен за образцы строк кода.
137 2015-05-07 20:01:55
Re: Бета версия 1.51 (26 replies, posted in Russian)
atempbox
А что мешает вам отметить их звездочкой или цветом? )
Точно - вопрос читал, и не ожидал такого ответа. Все гениальное просто. :-)
138 2015-05-05 19:21:41
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Спасибо Дмитрий, неожиданно. Работает - Супер. Пойду колдовать дальше. Я пытался сделать но с более простыми примерами, а они отказывались работать.
139 2015-05-05 18:38:13
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Не подчиняется мне данная возможность. Два вечера в никуда :- ((((. Уже и просит стесняюсь, но если будет минутка может кто сможет набросать насчет присвоения значения в виде даты компоненту DateTimePicker. Дмитрия и отвлекать не сильно хочется.
140 2015-05-04 16:42:47
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Спасибо, вчера весь день почти шерстил интернет по данному вопросу, и даже в паре мест видел о преобразовании с помощью (EncodeDate), поэтому буду дальше рыть в этом направлении.
141 2015-05-03 11:32:26
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?
Update - в принципе вопрос наверное не корректен. Нашел что TextBox у Вас совсем дату не принимает.
Тогда вопрос можно ли сделать так чтобы DateTimePicker отображал только информацию аналогичную TextBox с маской ввода. (отключить чекбокс и возможность выбора даты через компонент), т.е. чтобы она вводилась только вручную?
142 2015-05-03 08:44:10
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)
Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?
143 2015-05-02 19:27:39
Re: [Скрипт] Импорт CSV файла в базу (33 replies, posted in FAQ)
Спасибо за ответ. Так и предполагал. И если с большей частью кода мне визуально понятно, то больше интересует структура данной строки
if arrStr[1] <> '' then arrStr[1] := ''''+ ReplaceStr(arrStr[1], '''', '''''') + ''''
слишком много для меня знаков такого вида, ("") и просто не могу никак сообразить за что они в таком количестве отвечают. :-(
А структура реально упростилась.
144 2015-05-02 14:28:14
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Дмитрий тогда такой вопрос - если в грид не выводится значение поля счетчик, и запись удаляется (именно через меню грид, удалить запись), то тогда получается строка в таблице базы данных (не гриде) все равно остается? т.к. значение поля не удалено, и отсчет продолжается, или у Вас данная функция реализована иным образом.
(вопрос связан с тем, что если строка остается, то база постоянно растет, даже и при удалении каких либо записей.)
145 2015-05-01 20:00:21
Re: [Скрипт] Импорт CSV файла в базу (33 replies, posted in FAQ)
Дмитрий а в чем отличие данного примера от других?
И не могли бы Вы прокомментировать данный участок, не совсем понимаю что к чему:
begin
arrStr := SplitString(sl[i], ';');
// LastName
if arrStr[0] <> '' then arrStr[0] := ''''+ ReplaceStr(arrStr[0], '''', '''''') + ''''
else arrStr[0] := 'NULL';
// FirstName
if arrStr[1] <> '' then arrStr[1] := ''''+ ReplaceStr(arrStr[1], '''', '''''') + ''''
else arrStr[1] := 'NULL';
SQLExecute ('INSERT INTO base (lastname, firstname) VALUES ('+ arrStr[0] +','+ arrStr[1]+');');
Form1.Label1.Caption := IntToStr(i+1) + ' of ' + IntToStr(c+1);
Application.ProcessMessages;
end;
Спасибо.
146 2015-04-28 19:48:54
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
т.е. из базы никак? только программами типа SQLiteStudio если записей очень много и половину из них нужно сдвинуть вниз на 1 позицию освободив одно Id?
147 2015-04-28 18:36:45
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Опять я. Дмитрий а как реализовать функцию которая могла бы добавить новую строку в таблице в определенном месте? Сегодня заметил что пропустил одну запись которые идут строго по порядку и пришлось около 20 строк удалять и переписывать заново, но уже с добавлением пропущенной. Спасибо за ответ.
148 2015-04-26 17:58:01
Re: Бета версия 1.51 (26 replies, posted in Russian)
В развитие темы - еще меню вкладка наверное частично подойдет.
149 2015-04-23 13:19:52
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Дмитрий а более общий вопрос:
1. имеем таблицу с полем счетчик для учета общего количества помещенных записей, без учета удаленных строк.
2. написаны скрипты для экспорта из CSV файла, где данное поле включено в запись базы. Проверка работоспособности проверялась при помощи экспортируемых в exceл записей из грида. (т.е. позиция по счетчику внесена в файл CSV) (без данной колонки в последующем после экспорта невозможно отредактировать запись, т.к. = ОШИБКА)
3. сейчас приходит понимание, что это наверное не совсем верно, т.к. в случае экспорта например сторонних данных нужно в ручную будет в CSV файле прописывать нумерацию согласно данных счетчика внесенных в базу.
4. Также прописаны скрипты ведения логов базы данных, и при удалении записи из грида в данный момент удаляется и информация из позиции счетчика, т.к. данная позиция вынесена в грид для возможности экспорта в Exel (а он забирает автоматически только те колонки что перечислены в гриде), и соответственно значение по счетчику минусуется каждый раз на -1.
Вопрос - как логично перенастроить все данные, чтобы возможность экспорта в excel с колонкой "счетчика" осталась, и при этом убрать информацию о счетчике из грида, чтобы данная ячейка не удалялась при удалении записи и всегда считалась +1.
Немного сумбурно конечно, но по другому не придумал как описать :-)
150 2015-04-23 09:51:54
Re: Сделал проект (нужна помощь) (57 replies, posted in Russian)
Спасибо работает. И снова благодарю за наилучшую поддержку.