151

(18 replies, posted in Russian)

приложил файл в екселе указав цветом строчки какие меня интересуют...

152

(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

(54 replies, posted in Russian)

Супер!
моя проблемулька РЕШЕНА!!!....восторгу нет предела!!!

                     С Уважением и Благодарностью Роман!!!

154

(54 replies, posted in Russian)

К сожалению не знаю как это сделать.

0'кей...надежда умирает последней.............................
Подскажите возможно ли решить это таким путём:
в Edit1 вставляем веществ.число, а в Edit2 отображается результат
числа которое в Edit1 умноженное на (10,100,1000,10000,100000)
т.е.ровно на столько, сколько знаков после запятой?
если да то как?

                                             С Уважением и Благодарностью Роман!!!

155

(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

(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

(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

(131 replies, posted in Russian)

Доброго дня!
Как из CheckBox превратить в TableGrid "Да" и "Нет" в другие слова - это "мы" могём...(через вычисл. поле)
Вопрос:
подскажите  как на форме из CheckBox извлечь в Edit  "Да" и "Нет" или "Не знаю" (БЕЗ вычисл. поле)?
рис. прилагается...

                                                                                                С Уважением и Благодарностью Роман!!!

159

(1 replies, posted in FAQ)

Доброго дня!
Спасибо за предоставленный пример!
Для новичка, кем сам являюсь...это находка!

С Уважением и Благодарностью Роман!!!

160

(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

(131 replies, posted in Russian)

УРА! Заработало..........!!!

С Уважением и Благодарностью Роман!!!

162

(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

(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 не могу заставить работать...
Вопрос: Где ошибка?

                                                                                   С Уважением и Благодарностью Роман!!!

164

(131 replies, posted in Russian)

Благодарю!

165

(131 replies, posted in Russian)

Доброго дня!
Подскажите добрые люди....
как в TableGrid заголовки колонок выровнять по центру?

             С Уважением и Благодарностью Роман!!!

166

(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

(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

(131 replies, posted in Russian)

Доброго времени суток Дмитрий!   версия 2.1
Есть скрипт:

 procedure Form1_TableGrid1_OnDoubleClick (Sender: string);
begin
    Form6.Show;
end;

т.е. при двойном клике на строчку в TableGrid1 он должен
открыть  Form6 для (НОВОЙ ЗАПИСИ) в  другую таблицу....
Проблема в том, что он делает это один раз, после повторного
клика на строчку он показывает , что было записано...
А НАДО сделать новую запись!
Подскажите ошибку?

                      С Уважением и Благодарностью Роман!!!

169

(131 replies, posted in Russian)

Именно то, что надо....
Разобрался...подкаректировал...Получилось добиться нужного результата!

Благодарю Вас wertyby

170

(131 replies, posted in Russian)

Наверное просто событие в гриде создать , на двойной щелчок открыть frm.New.Show; , на форуме примеры есть, воспользуйтесь поиском

К сожалению поиск результатом не помог...
если есть на эту тему ссылочка подскажите?

     С Уважением и Благодарностью Роман!!!

171

(131 replies, posted in Russian)

Доброго времени суток Дмитрий!   версия 2.1
В гриде щёлкаем два раз по строчки...открывается форма показать запись...

подскажите скрипт...

щёлкаем два раз по строчки...открывается совсем другая  форма добавить запись в другую таблицу,
но с одним и тем же полем указанном в гриде(две таблицы имеют связь)т.е со связью со строчкой...
если возможно с наглядным проектом по этому вопросу....

                                                         С Уважением и Благодарностью Роман!!!

172

(131 replies, posted in Russian)

Ооо! эта фишка у меня на первом месте!
Но я имел в виду,когда заполняешь форму(новая запись)...
бегаешь Ente"ром" по Edit"ам" и попав на ComboBox он сам раскрылся(выдав список),
а я стрелочками выбрав нужное значения, через Enter продолжил дальше заполнения...
если что то подобное есть..?.буду признателен!

                                                                С Уважением и Благодарностью Роман!!!

173

(131 replies, posted in Russian)

версия 2.1
На форме (новая запись)  бегать Enter ...я нашёл пример с Edit.....
Подскажите можно ли управлять ComboBox?
( Edit- внесли значение....Enter.....открыли ComboBox.....стрелками выбрали значение....Enter....и.т.д....)

                                                                                                            С Уважением и Благодарностью Роман!!!

174

(131 replies, posted in Russian)

Супер!!! Работает....
Моим восхищениям программой "My Visual Database" нет придела......

                                     С Уважением и Благодарностью Роман!!!

175

(131 replies, posted in Russian)

Возник вопросик следующего характера...
не используя Button для поиска получать сразу результат в TableGrid
выбрав значения из:
1)   Edit?
2)   CheckBox?
3)   ComboBox?
если ДА..., то хоть примерчик с проектом, аль скриптик...или сылочку.......

                                                       С Уважением и Благодарностью Роман!!!