приложил файл в екселе указав цветом строчки какие меня интересуют...
152 2015-11-17 07:07:47
Topic: импорт... (18 replies, posted in Russian)
Доброго времени суток Дмитрий! версия 2.1
Взял скрипт из вашего примера по валютам и корректирую под свой нужды:
procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
var
OpenDialog: TOpenDialog; // объект для диалога выбора файла
sl: TStringList; // объект, представляющий из себя текстовый список
arrStr: array of string; // массив, в который будет возвращаться результат функции SplitString
i,c: integer; // числовые переменные для цикла
ValuteID: string;
sDate: string;
sval: string;
begin
OpenDialog := TOpenDialog.Create(Form1); // создаем диалог выбора файла
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 файле в качестве разделителя столбцов используется знак ;
// date - текстовое содержимое первого столбца содержится в arrStr[0]
if arrStr[0]<>'' then // если данные есть
sDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[0])) + '"' // приводим дату к формату, который необходим для записи в БД
else sDate := 'NULL'; // иначе значение NULL
// id_valute - текстовое содердимое второго столбца содержится в arrStr[1]
ValuteID := SQLExecute ('SELECT id FROM valute WHERE valute LIKE "' + arrStr[1] +'"'); // ищем идентификатор названия валюты
if ValuteID = '' then ValuteID := 'NULL';
// value - текстовое содержимое третьего столбца содердижится в arrStr[2]
arrStr[2] := ReplaceStr(arrStr[2], ',', '.'); // т.к. в arrStr[2] число с плавающей запятой, на всякий случай заменяем запятую на точку, т.к. для записи в БД числа с плавающей запятой используется точка
if arrStr[2] = '' then arrStr[2] := 'NULL';
// проверяем, для избежания дубликатов, данная проверка не обязательна, и зависит от вашей ситуации
sval := SQLExecute('SELECT id FROM currency WHERE (date = ' + sDate + ') AND (id_valute = ' + ValuteID + ') AND (value = ' + arrStr[2] + ') ;');
if sval = '' then // если в переменной sval - пусто, значит SQL запрос ничего не вернул, и дубликата данных нет
SQLExecute ('INSERT INTO currency (date, id_valute, value) VALUES ('+ sDate +','+ ValuteID +','+arrStr[2] +');'); // с помощью SQL запрос вставляем данные в БД
Form1.Label1.Caption := IntToStr(i) + ' of ' + IntToStr(c); // выводим в компонент надписи, какое количество строк с данными обработано
Application.ProcessMessages; // необходимо, чтобы надпись в Label один обновилась
end;
sl.Free; // уничтожаем объект, после работы с ним
Form1.TableGrid1.dbUpdate; // заставляем TableGrid обновить данные
ShowMessage('Импорт завершен');
end;
OpenDialog.Free; // уничтожаем объект, после работы с ним
end;
Моя проблема заключается в том,что...
когда в CSV файле для импорта в колонки(их там три) попадает пустая клетка-ЭТО НОРМАЛЬНО!
но когда в CSV файле для импорта в колонки попадают в дату, название валют или кодировки
другой текст не имеющий отношения к дате, названию валют или кодировкам программа начинает ругаться...
Вопрос:
1. возможно ли разрешить импортировать даже если они попадаются ?
2. возможно ли разрешить импортировать, но тогда без них?
3. возможно ли разрешить импортировать, только те строчки,
в которых присутствует валюта в родительской таблице? если на 3. ДА подскажите куда, где, и что дописать?
Для меня это ВАЖНО! (любой вариант меня устроит... лишь бы с импортировать, P/S предпочтительно 3. пункт вопроса!!!)
если на 3. вопрос НЕТ...тогда 1.вариант или 2.вариант...
а в гриде я им устрою фильтр...указав какие строчки показывать с помощью ComboBox привязанному к названию валют...
С Уважением и Благодарностью Роман!!!
153 2015-11-17 05:46:14
Re: вычислительное поле (54 replies, posted in Russian)
Супер!
моя проблемулька РЕШЕНА!!!....восторгу нет предела!!!
С Уважением и Благодарностью Роман!!!
154 2015-11-16 20:10:02
Re: вычислительное поле (54 replies, posted in Russian)
К сожалению не знаю как это сделать.
0'кей...надежда умирает последней.............................
Подскажите возможно ли решить это таким путём:
в Edit1 вставляем веществ.число, а в Edit2 отображается результат
числа которое в Edit1 умноженное на (10,100,1000,10000,100000)
т.е.ровно на столько, сколько знаков после запятой?
если да то как?
С Уважением и Благодарностью Роман!!!
155 2015-11-16 08:12:33
Re: вычислительное поле (54 replies, posted in Russian)
Всем доброго дня!
Не получилось у меня вставить:
procedure Form7_Edit5_OnChange (Sender: string);
begin
CalculateTotal*1000;
end;
в этот скрипт:
//калькулятор на форме
procedure CalculateTotal;
begin
Form7.Edit6.Value := Abs(Form7.Edit4.Value - Form7.Edit5.Value); // calculate Edit6 положительное число...
end;
procedure Form7_Edit4_OnChange (Sender: string);
begin
CalculateTotal;
end;
procedure Form7_Edit5_OnChange (Sender: string);
begin
CalculateTotal;
end;
выдаёт ошибку....метод научного тыка к результату не привёл....
Попробую выразить,чего хочу добиться в Рисунке...
156 2015-11-15 06:34:16
Re: вычислительное поле (54 replies, posted in Russian)
День добрый!
На первый вопрос всё ок...
По поводу второго вопроса:
в Edit5 и Edit4 будут автоматом вводиться ВЕЩЕСТВ. ЧИСЛА(пример: 1,1450 или 100,14)
а для точного расчёта надо эти числа преобразовать в целые числа....(11450 или 10014)
Пример: цена открытия 1,15....цена закрытия 1,17...чтобы узнать сколько цена прошла в пунктах надо
115-117=2 (пункта)
Суть вопроса: в Edit5 и Edit4 ввели ВЕЩЕСТВ. ЧИСЛА ....в скрипте выше указанном
с начало преобразовать ВЕЩЕСТВ. ЧИСЛА в ЦЕЛЫЕ ЧИСЛА,
т.е. ввели 0,150 в Edit4 , а Edit5 ввели 0,160, а скрипт произвёл вычисления с числами 150-160=10 (пунктов)
как это замудрить?
С Уважением и Благодарностью Роман!!!
157 2015-11-13 16:11:04
Re: вычислительное поле (54 replies, posted in Russian)
Хорошего настроения.....
есть скрипт для вычисления...
//калькулятор на форме
procedure CalculateTotal;
begin
Form7.Edit6.Value := (Form7.Edit4.Value) - (Form7.Edit5.Value); // calculate
end;
procedure Form7_Edit4_OnChange (Sender: string);
begin
CalculateTotal;
end;
procedure Form7_Edit5_OnChange (Sender: string);
begin
CalculateTotal;
end;
Подскажите пожайлуста , что и где дописать:
1) результат в Edit6 был всегда положительным (пример: (10)-(13)=3
Р/S в скобках всегда будут положительные числа!)
2) в Edit5 и Edit4 будут ВЕЩЕСТВ. ЧИСЛА.
перед вычислением преобразовать в целые числа в нутри скрипта...(ноль нельзя убирать)
пример Edit4= 1,10 - Edit5=1,20 конечный результат Edit6=10
С Уважением и Благодарностью Роман!!!
158 2015-11-13 07:44:20
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго дня!
Как из CheckBox превратить в TableGrid "Да" и "Нет" в другие слова - это "мы" могём...(через вычисл. поле)
Вопрос:
подскажите как на форме из CheckBox извлечь в Edit "Да" и "Нет" или "Не знаю" (БЕЗ вычисл. поле)?
рис. прилагается...
С Уважением и Благодарностью Роман!!!
159 2015-11-13 06:44:45
Re: [script] Extract sub-string from a string (1 replies, posted in FAQ)
Доброго дня!
Спасибо за предоставленный пример!
Для новичка, кем сам являюсь...это находка!
С Уважением и Благодарностью Роман!!!
160 2015-11-12 12:09:44
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Это опять я ....
Вот....
procedure Form2_Edit3_OnChange (Sender: string);
var
i,c: integer;
begin
c := Form2.Edit3.Count - 1;
for i := 0 to c do
begin
if Form2.Edit3.Cells[i] = 'Real' then Form3.TableGrid1.Cell[i].Color := clSilver
else Form2.Edit3.Cell[i].Color := clYellow;
end;
end;
методом научного тыка-не помогло
1)Подскажите пожайлуста.....
2)Возможно ли на форме делать GroupBox или Panel не видимыми используя CheckBox (если Да-то как?)
С Уважением и Благодарностью Роман!!!
161 2015-11-12 09:51:39
Re: Подскажите с скриптом... (131 replies, posted in Russian)
УРА! Заработало..........!!!
С Уважением и Благодарностью Роман!!!
162 2015-11-12 07:34:12
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Скрипт:
procedure Form2_OnShow (Sender: string; ACol, ARow: Integer);
begin
Form2_ComboBox1_OnChange ('');
end;
procedure Form2_ComboBox1_OnChange (Sender: string);
begin
Form2.Edit1.Text := SQLExecute ('SELECT deposit FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) );
Form2.ComboBox11.dbItemID := SQLExecute ('SELECT IFNULL(id_nik, -1)FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) );
//значение для CheckBox
if SQLExecute ('SELECT Real FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) ) = '1' then
Form2.CheckBox5:= True else Form2.CheckBox5:= False;
end;
Edit1 и ComboBox11 работает!........ CheckBox5 не могу заставить работать...
Выдаёт ошибочку:
Incompatible types:'TdbCheckBox',Boolean' at 12:23
Вопрос: как устранить ошибочку?
163 2015-11-11 22:52:46
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго времени суток Дмитрий!
Есть скрипт...взят из примера на форуме...
procedure Form2_OnShow (Sender: string; Action: string);
begin
Form2_ComboBox1_OnChange ('');
end;
procedure Form2_ComboBox1_OnChange (Sender: string);
begin
Form2.CheckBox5:= SQLExecute ('SELECT Real FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) );
Form2.ComboBox11:= SQLExecute ('SELECT id_nik FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) );
Form2.Edit1.Text := SQLExecute ('SELECT deposit FROM Centre WHERE id = ' + IntToStr(Form2.ComboBox1.dbItemID) );
end;
Edit1-получилось работает!........с ComboBox11 и CheckBox5 не могу заставить работать...
Вопрос: Где ошибка?
С Уважением и Благодарностью Роман!!!
165 2015-11-11 10:03:05
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго дня!
Подскажите добрые люди....
как в TableGrid заголовки колонок выровнять по центру?
С Уважением и Благодарностью Роман!!!
166 2015-11-10 06:23:18
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго времени суток Дмитрий! версия 2.1
Есть скрипт:
procedure Form3_TableGrid1_OnDoubleClick (Sender: string);
begin
Form10.Show;
end;
т.е. при двойном клике на строчку в TableGrid1 он должен
открыть Form10 для (НОВОЙ ЗАПИСИ) в другую таблицу....
Проблема в том, что он делает это один раз, после повторного
клика на строчку он показывает , что было записано...
А НАДО сделать новую запись!
Подскажите ошибку?
Немного поколдовав получил:
//при двойном нажатии по строчки в TableGrid1....
procedure Form3_TableGrid1_OnDoubleClick (Sender: string);
begin
Form10.Show; //открывает Form10
Form10.ComboBox1.dbItemID := Form3.TableGrid1.dbItemID; //значения из TableGrid1 = значению в ComboBox1
Form10.Button2.Click; //кликает Button2 (очистить поля)
end;
//нажав на Button2 (очистить поля) очищает их от предыдущих значений...
procedure Form10_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
Form10.Edit1.Text := '';
Form10.Edit2.Text := '';
Form10.DateTimePicker1.Checked := False;
end;
Дмитрий...если правильно дайте знать?
С Уважением и Благодарностью Роман!!!
167 2015-11-09 20:46:44
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Может повесить на кнопку сохранения записи такую функцию как обновление грида?
например: Form1.REZULTAT.dbUpdate; // Update TableGrid
написал скрипт так:
procedure Form6_OnClose (Sender: string; Action: string);
begin
Form1.TableGrid1.dbUpdate;
end;
т.е. после закрытия Form6 обновить значения в гриде...(обновить получилось)
кликаем два раза на строчку в гриде показывает запись которую только что сделали....
А НАДО открыть Form6 для новой записи!
может надо обновить саму форму?...как это сделать?
168 2015-11-09 16:26:45
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго времени суток Дмитрий! версия 2.1
Есть скрипт:
procedure Form1_TableGrid1_OnDoubleClick (Sender: string);
begin
Form6.Show;
end;
т.е. при двойном клике на строчку в TableGrid1 он должен
открыть Form6 для (НОВОЙ ЗАПИСИ) в другую таблицу....
Проблема в том, что он делает это один раз, после повторного
клика на строчку он показывает , что было записано...
А НАДО сделать новую запись!
Подскажите ошибку?
С Уважением и Благодарностью Роман!!!
169 2015-11-09 09:50:13
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Именно то, что надо....
Разобрался...подкаректировал...Получилось добиться нужного результата!
Благодарю Вас wertyby
170 2015-11-08 14:22:43
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Наверное просто событие в гриде создать , на двойной щелчок открыть frm.New.Show; , на форуме примеры есть, воспользуйтесь поиском
К сожалению поиск результатом не помог...
если есть на эту тему ссылочка подскажите?
С Уважением и Благодарностью Роман!!!
171 2015-11-08 05:27:59
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Доброго времени суток Дмитрий! версия 2.1
В гриде щёлкаем два раз по строчки...открывается форма показать запись...
подскажите скрипт...
щёлкаем два раз по строчки...открывается совсем другая форма добавить запись в другую таблицу,
но с одним и тем же полем указанном в гриде(две таблицы имеют связь)т.е со связью со строчкой...
если возможно с наглядным проектом по этому вопросу....
С Уважением и Благодарностью Роман!!!
172 2015-11-07 17:57:06
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Ооо! эта фишка у меня на первом месте!
Но я имел в виду,когда заполняешь форму(новая запись)...
бегаешь Ente"ром" по Edit"ам" и попав на ComboBox он сам раскрылся(выдав список),
а я стрелочками выбрав нужное значения, через Enter продолжил дальше заполнения...
если что то подобное есть..?.буду признателен!
С Уважением и Благодарностью Роман!!!
173 2015-11-07 15:50:11
Re: Подскажите с скриптом... (131 replies, posted in Russian)
версия 2.1
На форме (новая запись) бегать Enter ...я нашёл пример с Edit.....
Подскажите можно ли управлять ComboBox?
( Edit- внесли значение....Enter.....открыли ComboBox.....стрелками выбрали значение....Enter....и.т.д....)
С Уважением и Благодарностью Роман!!!
174 2015-11-07 11:37:44
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Супер!!! Работает....
Моим восхищениям программой "My Visual Database" нет придела......
С Уважением и Благодарностью Роман!!!
175 2015-11-07 10:55:43
Re: Подскажите с скриптом... (131 replies, posted in Russian)
Возник вопросик следующего характера...
не используя Button для поиска получать сразу результат в TableGrid
выбрав значения из:
1) Edit?
2) CheckBox?
3) ComboBox?
если ДА..., то хоть примерчик с проектом, аль скриптик...или сылочку.......
С Уважением и Благодарностью Роман!!!