Спасибо! вроде заработало, так делал но с Now(), без () не додумался, потестирую. еще раз спасибо!

Добрый день! не стал плодить темы, подскажите что не так

procedure Form1_GridEmployees_OnChange (Sender: string);
var
    i,c: integer;
begin
 c := Form1.GridEmployees.RowCount - 1;
    for i := 0 to c do
    begin
       if Form1.GridEmployees.Cells[4,i] <> 'Выполнено' and StrToDateTime(Form1.GridEmployees.Cells[3,i]) < Now()  then Form1.GridEmployees.Cell[3,i].Color := clRed;
    end;
end;

по отдельности каждое условие работает, как только связываю and  ошибка "Incompatible types"

1. Спасибо!!!
2. Набросал проект если получится с multiselect будет оч неплохо. планируется для канцелярии наподобии документооборота в дальнейшем с напоминаниями, отчетами и т. д.

добрый день!
1) подскажите к записи привязан файл с помощью компонента DBFile, возможно ли нажав 2 кликом в TableGrid по записи сразу открывался файл без нажатия на компонент DBFile -> открыть файл?
2)Возможно ли использую свойство multiselect компонента ComboBox сразу нескольким записям привязать файл DBFile?

http://myvisualdatabase.com/forum/viewtopic.php?id=1062

http://myvisualdatabase.com/database_ex … ctory.html

107

(3 replies, posted in Russian)

может тут посмотреть http://myvisualdatabase.com/forum/viewtopic.php?id=2124

да все теперь понятно! работает ок! СПАСИБО!!!!!! а можно при импорте или после импорта по нажатию на кнопку,  чтобы значения 2 полей сливались в 3-е поле и затем символы этого  3- поля заменялись в определенном порядке напрмер а:=j или й:=v например 1поле = а, 2поле =й должно при импорте получиться 3поле=jv. Если не сложно натолкните на мысль, ну если нет то и так пойдет импорт в принципе устраивает

я извиняюсь за назойливость, например в cvs файле есть записи в поле Lat начинается с символа ";"  этот символ соответсвует кkавиша ж=;
так вот при импорте где присутствует ; запись в поле лат обрывается не импортируется до конца.
например записи в cvs
Nkart                 FIO                                                      SEX    Lat
Ж760001    76    Жукова Пелагея Васильевна            Ж      ;760001  ;erjdf Gtkfutz Dfcbkmtdyf
Ж760002    76    Жиманова Надежда Александровна    Ж    ;760002  ;bvfyjdf Yflt;lf Fktrcfylhjdyf
Ж760003    76    Жиров Никита Андреевич                    М    ;760003  ;bhjd Ybrbnf Fylhttdbx

что получается при импорте
Nkart                 FIO                                                      SEX    Lat
Ж760001    76    Жукова Пелагея Васильевна            Ж      "
Ж760002    76    Жиманова Надежда Александровна    Ж    "
Ж760003    76    Жиров Никита Андреевич                    М    "

также если символ ; стоит в середине слова получается так
cvs
Д780069    78    Долженко Екатерина Андреевна    Ж    L780069  Ljk;tyrj Trfnthbyf Fylhttdyf
при импорте
Д780069    78    Долженко Екатерина Андреевна    Ж    L780069  "Ljk
т.е. доходит до символа ; и обрыв

и при импорт1 тоже самое.
Итого: импорты работают русские символы все без проблем импортируются, но в часности символ ; не импортирует

ну и попутный вопрос как можно прервать импорт какой скрипт нужен

Версия 2,8. Если не трудно как будет время посмотрите импорт2 (где загружается справочник) выскакивает ошибка.  в импорте1 не выдает ошибку, но и сисмволы не загружает на людей у кого встречаются в именах буквы "ж", "э", "х", "ю", "б". обьясню для чего: в поле LAT импортируются значения полей NKART+FIO, только все буквы русской раскладки клавиатуры заменены на соответсвующие латинские, т.е. й=q ц=w... х=[... ж=;. для чего - для того чтобы можно было сформировать qr код, сканер не читает латиницу, в qr код да все засовывается и кирилица читается телефоном-приложением, но usb-сканером упорно не хочет воспримнимать кирилицу (может что то со сканером). итог я в qr код засовываю латинские символы, которые соответсвуют русской раскладке, а сканер ставлю в режим эмуляции клавиатуры, и сканер просто печатает латинские символы в русской раскладке, ух да понимаю, что это костыль с изолентой, но я не нашел др выхода. заранее спасибо!!!

хм вот скрипт вро де все экранировано, этим скриптом загружаю запись где нет никах символов одни лат буквы поле lat все ок, но если встречается символ ";" то запись получается вида например должно получится fdr;tdy, а импортируется fdr т.е. только до символа ";" дальше обрыв, затем начинается обработка следующей записи вот скрипт 1-го импорта

procedure Form1_Button4_OnClick (Sender: string; var Cancel: boolean);

var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;
begin
     SQLExecute('delete from db_main') ;
     OpenDialog := TOpenDialog.Create(Form1);
     OpenDialog.InitialDir := ExtractFileDir(Application.Exename);

     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName);


          c := sl.Count - 1;
          for i := 0 to c do
          begin
               arrStr := SplitString(sl[i], ';');

               if arrStr[0] <> '' then arrStr[0] := ''''+ ReplaceStr(arrStr[0], '''', '''''') + ''''
                   else arrStr[0] := 'NULL';

               if arrStr[1] <> '' then arrStr[1] := ''''+ ReplaceStr(arrStr[1], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';
               if arrStr[2] <> '' then arrStr[2] := ''''+ ReplaceStr(arrStr[2], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';
               if arrStr[3] <> '' then arrStr[3] := ''''+ ReplaceStr(arrStr[3], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';
               if arrStr[4] <> '' then arrStr[4] := ''''+ ReplaceStr(arrStr[4], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';


               SQLExecute ('INSERT INTO db_MAIN (Nkart, uch, FIO, SEX, lat) VALUES ('+ arrStr[0] +','+ arrStr[1]+','+ arrStr[2]+','+ arrStr[3]+','+ arrStr[4]+');');


               Form1.Label2.Caption := IntToStr(i+1) + ' of ' + IntToStr(c+1);
               Application.ProcessMessages;
          end;


          sl.Free;
          Form1.TableGrid1.dbUpdate;
     end;
     OpenDialog.Free;
end;

попробывал из первого поста в cvs файл в имена и фамилии вставить символы ";" "[", при импорте также обрезалось т.е в базу загрузилось только до символов ; или [, не могу разобраться

Добрый день! опробывал 2 этих (с простой записью в таблицу и с заполнением справочника) импорта все ок, но если в cvs файле в записи содержится символы ; [ ] ' . , то в первом случае в базу эти сисмволы не загружаются, во втором случае импорт затыкается. Возможно ли импортировать записи с такими символы, при ручном ввводе (добавление записей через форму) сохраняютя эти сисмволы без проблем.

113

(3 replies, posted in Russian)

спасибо! телефоном приложением прочитался, в понедельник попробую сканером, qr код кажется может сразу несколько полей выводить, только я не понял как в properties могу выбрать только 1 поле, несколько полей только скриптом? про несколько полей не срочно это так планы на будущее и для общего развития

114

(3 replies, posted in Russian)

Добрый день! Подскажите кто-нибудь есть номер например Ф050201 генерируется штрих код все ок, но когда считывает сканер то кирилическая буква не читается получается 050201 (пробывал разными сканерами в том числе и с телефона приложением результат один и тот же кирилице не читает), если ставлю латиницу D051512 то все ок. перепробывал все виды штрих кодов не помогло. что нужно сделать? перекодировать как то кирилицу в латиницу, но надо обязательно что бы при считывании сканером в текстовый документ выводилось код с кирилицей? подскажите ктонибудь, в google не нашел толком, в описании fasreport тоже толком про это не написано, на форуме тоже ничего про кирилицу не нашел

Спасибо!
но что то не заработало если просто поставить {DateTimePicker2}, это делается в скрипте при нажатии бутона срабатывает скрипт и открывается другая форма, {DateTimePicker2} находится на тойже форме что и бутон
сделал так

SQLExecute('insert into temp_z (id_osn, id_mkb3, data_uchet1,dead_v_tech) select osn.id, osn.id_mkb3, osn.data_uchet1,osn.id_deadtech from osn where (strftime(''%Y'', data_uchet1, ''+1 years'') = strftime(''%Y'', '''+FormatDateTime('yyyy-MM-dd 00:00:00.000', Reports.DateTimePicker2.DateTime)+'''))');

вроде работает грубовато, но работает


пробывал так

SQLExecute('insert into temp_z (id_osn, id_mkb3, data_uchet1,dead_v_tech) select osn.id, osn.id_mkb3, osn.data_uchet1,osn.id_deadtech from osn where (strftime(''%Y'', data_uchet1, ''+1 years'') = strftime(''%Y'','' {DateTimePicker2}''))');

не заработало, ошибку не выдает, но и результата нет, в temp_z ничего не записывает

добрый день!
как в код, который выше правильно  место 'now'  написать DateTimePicker. если грубо как высчитать к примеру возраст не от текущей даты, а от той даты которая в DateTimePicker.

Добрый день! Люди подскажите, я знаю что это просто, но что то не так: надо  Вычислить DateTimePicker - поле дата. т.е. надо отобрать людей которые записались в прошлом году. например в DateTimePicker  = 31.12.2016, в базе поле Data = 01.01.2015 разность должна быть = 1, вычитать надо только года.  сейчас сделано текущая дата - поле Data, но надо что бы место текущей даты стояло DateTimePicker

where ((date(''now'') - data_uchet1 + (case when strftime(''now'') < strftime( data_uchet) then -1 else 0 end)=1)

этот код работает с текущей датой, а вот с DateTimePicker никак не могу, результат с DateTimePicker всегда получается -2017 не могу понять, где то может символ не туда ставлю

вопрос снят, разобрался

Люди добрые, помогите!
Есть временная таблица, заполняется из таблицы OSN полями  id, id_sex, id_mkb1, id_mkb2, id_mkb3, data_diag 1, data_diag2, data_diag3 заполняю ее так

SQLExecute('insert into temp (id_osn, id_sex, id_mkb1, osn.data_diag1 ) SELECT osn.id, osn.id_sex, osn.id_mkb1, osn.data_diag1  FROM osn where ((data_diag1>='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', form1.DateTimePicker1.DateTime)+''')and(data_diag1<='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', Form1.DateTimePicker2.DateTime)+'''))');

SQLExecute('insert into temp (id_osn, id_sex, id_mkb2, data_diag2) SELECT osn.id, osn.id_sex, osn.id_mkb2, osn.data_diag2  from osn where ((data_diag2>='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', form1.DateTimePicker1.DateTime)+''')and(data_diag2<='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', Form1.DateTimePicker2.DateTime)+'''))');

SQLExecute('insert into temp (id_osn, id_sex, id_mkb3, data_diag3) select osn.id, osn.id_sex, osn.id_mkb3, osn.data_diag3  from osn where ((data_diag3>='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', form1.DateTimePicker1.DateTime)+''')and(data_diag3<='''+FormatDateTime('yyyy-MM-dd 00:00:00.000', Form1.DateTimePicker2.DateTime)+'''))');

Хотелось чтобы таблица наполнилась так, если у пациента все три data_diag заполнении, то таких записей должно в temp 3 получится, если два data_diag, то 2 записи, так вот при таком скрипте, формируется 1 запись, в которой если три data_diag заполнены, то все поля заполнены, если две data_diag то 2 поля заполнены, как быть подскажите.
Для чего надо: хотел count подсчитать
Если у пациентов к примеру у трех заполненно 2 диагноза, а у одного 3 диагноза, то в отчете должна подсчитаться цифра 9 т. е. 3 пациента *2 + 1 пациент *3 = 9

120

(10 replies, posted in Russian)

Нашел другой способ.
помещать данные запроса прям в таблицу

SQLExecute('insert into repf (mk,sum,v1,v2,v3,v4) values (("C03-C06, C09 М"),(SELECT count(*) FROM osn WHERE ....

затем результат выводить в grid и уже потом в эксель, при 87 записях таблицы будет 87 запросов, перед каждым нажатием "Сформировать отчет" таблица будет чиститься

Спасибо!

121

(10 replies, posted in Russian)

вроде разобрался, нашел ошибку, пытаюсь сделать огромную таблицу состоящую из 2000 ячеек, надеюсь он не будет зависать при обработке базы из 5 тыс человек.
вопрос знатокам может есть способ другой, сейчас буду делать, по странично на каждую страничку будет своя кнопка или комбобоксом еще не решил. на странице примерно будет 400 ячеек, соответсвенно и в скрипте будет 400 переменных которые будут ложится в ячейки. Вопрос а надо как то память очищать пр закрытии отчета, значение переменных из памяти тоже чистятся?

или вообще может есть способ более простой реализовать такой отчет?

122

(10 replies, posted in Russian)

я так пробывал выдает ошибка синтаксис ерор, пытался всячески писать ругался на date(now), на case

a10:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.id_sex=1)and(osn.id_mkb>=1)and(osn.id_mkb<=500)and((date(now) - dr + (case when strftime(%m-%d, now) < strftime(%m-%d, dr) then -1 else 0 end))=30)');

я понимаю что туплю,  если удаться реализовать такой отчет, руководство вынужденно будет приобрести лицензию на MVD, потомучто функция SQLExecute реализовано в отчетах только с 2.8

123

(10 replies, posted in Russian)

Дмитрий! Спасибо!
Следом еще вопрос:
В базе поле Age вичисляемое по дате рождения, считает все правильно.
в FastReports делаю так

procedure Cross1OnBeforePrint(Sender: TfrxComponent);
var a10 :integer;
begin
a10:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.id_sex=1)and(osn.id_mkb>=1)and(osn.id_mkb<=500)and(osn.age=30)');
with Cross1 do
begin
AddValue(['C00-C0099 M'], [1], [a10]);
end;
end;
begin
  
end.

получается поле age символьное не считает, выдает ошибка, в AddValue можно запихать только число?
если я убираю osn.age=30 все норм
или может быть можно вычис поле возраст(age) сделать чтоб в базу записывалось не символьное поле, а целое число


вот сейчас понял вычисляемое поле - это поле не записывается в базу? как можно сделать чтобы поле Age при запуске программы или запуске отчета пересчитывалось и значение возраста записывалось в базу, это поле очень нужно, вручную ставить нельзя, возраст у человека изменяемый

или возможно ли сделать на форме кнопку "подсчитать возраст", которая бы высчитывала бы возраст от сегоднешней даты - дата рождения и изменяла бы записи поля age таблицы osn

124

(10 replies, posted in Russian)

в FastReports
делаю так ругается на SQLExecute "Undeclared identifier:SQLExecute"

procedure Cross1OnBeforePrint(Sender: TfrxComponent);
var s, a:integer;
begin
s:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=М)');
a:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=Ж)');                 
with Cross1 do
begin
AddValue(['C00-C0099 M'], [2], [s]);
AddValue(['C00-C0099 Ж'], [1], [a]);
end;

делаю так все нормально

procedure Cross1OnBeforePrint(Sender: TfrxComponent);
var s, a:integer;
begin
s:=500;
a:=10;                 
with Cross1 do
begin
AddValue(['C00-C0099 M'], [2], [s]);
AddValue(['C00-C0099 Ж'], [1], [a]);
end;

этот же скрипт в MVD работает

procedure Form1_Edit6_OnClick (Sender: string);
var s,a:integer;
begin
s:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=М)');
a:=SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=Ж)'); 
Form1.Edit6.Text := inttostr (s);
Form1.Edit7.Text := inttostr (a);
end;

FastReports не знает SQLExecute?
может можно что бы данные запросов передались в шаблон экселя? такого рода запросов в отчете будет примерно 300 на кажд ячейку свой запрос.

125

(10 replies, posted in Russian)

Хотел сделать таблицу в отчете с помощью компонента Cross tab. только что бы каждая ячейка таблицы заполнялась с помощью скрипта в котором был бы запрос в главную таблицу. запрос будет считать с помощью SELECT count(*) только количество строк по WHERE (условие). например в ячейку 1.1 положить количество строк удовлетворяющее условию возраст=35 + мужчина, а например в ячейку 1.2  положить количество строк удовлетворяющее условию возраст 35 + женщина.

ячейка 1.1
procedure Cross1OnBeforePrint(Sender: TfrxComponent);
var
s:string;   
begin
s := SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=М)'); //ругается на SQLExecute неизвестный идентификатор
//что надо написать чтобы Cross1 вставилось значение переменной s
end;

ячейка 1.2

procedure Cross2OnBeforePrint(Sender: TfrxComponent);
var
a:string;   
begin
a := SQLExecute('SELECT count(*) FROM osn WHERE (osn.vozrast=35) and (osn.sex=Ж)');
end;

делал sql отчет на кнопку, но туда можно засунуть только 1 запрос, подскажите как сделать может какой другой есть способ. в итоге должна получиться большая таблица я чейки котрой будут заполняться запросами функцией count(*)
не ругайте сильно я только учусь