Как мне кажется проще всего настроить синхронизацию системного времени с сервером и брать системное время .
Объясню почему :
На раскуривание NTP протокола и написание чего-то вразумительного у Вас уйдет уйма времени , а так как это фастскрипт (ключевое слово скрипт) то с точностью будут проблемы . Гораздо проще синхронизировать систему(средствами системы) и брать с неё время.Итого быстрее проще и точнее .
В случае с парком машин целесообразно поднять локальный сервер времени .
ИМХО

Мне было нужно отправлять на печать как данные внесенные в таблицы  так и некоторые данные (расчеты ,  время  и тд) которые не вносились в таблицы но нужно было их напечатать . Плюс нужна была возможность иногда их редактировать перед печатью.
Я создал временную таблицу (например так http://myvisualdatabase.com/forum/viewt … 526#p13526) со всеми необходимыми полями и внес туда все что мне надо напечатать открывал окно редактирования при необходимости и отправлял посредством SQL отчета ( SELECT * FROM VremTable WHERE id=1 ) в репорт на печать.
Этим я убил сразу 2 кролей , первое это возможность редактировать перед печатью без изменения данных в таблицах, второе передача данных из компонентов в репорт .

п.с.
надеюсь такое решение кому нибудь пригодится.

День добрый !
Меня собственно интересует возможность создания (средствами MyVisualDatabase) файла базы данных отличного от  sqlite.db ( MyFile.db ) для хранения увесистых таблиц несвязанных друг с другом и возможности их переноса (именно переноса а не копирования). Так же возможность писать и читать их.
Возможно ли это , если да то как ? (Без того что бы сервер sql подымать)

29

(12 replies, posted in Russian)

Данный код считает сумму чисел от 1 до 5    smile .
Про рекурсию можно почитать  например тут http://www.tvd-home.ru/recursion .
Рекурсию без четкого понимания того что делаешь лучше не применять и обойтись циклами , так как можно напороться на проблемы .
В данном случае  недоделанный (имхо) стек в фастскрипте заставил k245 протерять пару дней на поиски проблемы .
Честно говоря само наличие раздела "Реализованные и нереализованные особенности" в букваре к фастскрипту наводит на размышления .

30

(12 replies, posted in Russian)

Моя мысля была относительно первого вашего алгоритма .
И заключалась в том чтобы :
Глобально объявить массив датасет
var 
       Results : array of Tdataset ;
       IndexRes : int = 0 ;

procedure LoadMenu
   begin
      IndexRes := IndexRes +1;
      SetLength(Results,IndexRes) ;
.....................................
....................................
   SQLQuery('SELECT id, name, form FROM main_menu WHERE id_parent is null', Results[IndexRes-1])
.....................................
......................................
   index := Results[IndexRes-1].FieldByName('id').AsInteger;
    LoadMenu( miChild, index );
......................................
......................................
      IndexRes := IndexRes -1;
      SetLength(Results,IndexRes) ;
   end;

31

(12 replies, posted in Russian)

SQLQuery  Возвращает данные только в DataSet посему без него только функцию SQLExecute разве что можно задействовать для получения  данных из БД .
Пришлите ваш проект мне на почту , только обрежьте все кроме того что касается непосредственно  меню (если хотите)  . Есть мысль  ))))

32

(12 replies, posted in Russian)

.....объект Results уничтожается....

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

33

(12 replies, posted in Russian)

я рекурсию как то  использовал в функции (в фастскрипте)
Попробуйте завернуть процедуру как функцию

34

(4 replies, posted in Russian)

Для начала проверьте настройки мыши http://c2n.me/3PgEMQ3
так как при установке сторонних тем могут быть косяки .
Так же посмотрите свойства окна http://c2n.me/3PgEWXB и аналогичные у объектов .(в Вашем проэкте)

35

(4 replies, posted in Russian)

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

Возможно, что я очень консервативен, и текстовое главное меню уже не популярно......

Ну это скорее вопрос эргономики . На кнопки обычно вешаются основной функционал а в менюшках прячут второстепенные функции .
....хотя когда-то появление волков-командера для меня было писком и пределом мечтаний . )))
по поводу зависа  посмотрите циклы и условия в них (и количество нулей ))) было как то ... )
может какой объект что то ожидает ....
Мне обычно помогает просто очень внимательно все просмотреть , но если долго не нахожу бывает  переписываю с нуля ))))
...у Вас нет возврата из процедуры

Настройки и кодировки в почтовике полагаю Вы все попробовали ?
Посмотрите справку почтовика там куча всего . (на чтение у меня просто нет времени)
.....и без исходника сложно гадать в чем проблема .

О_о  а где вы квадратики видите ? в VisualDatabase ? или в полученной почте ?
Возможно нужно произвести обратные действия с текстом так как OpenFile может не понимать русский (не проверял)

Саму функцию куда нибудь в кучу с другими где удобно , а применять :
......
var
Stroka_s_Kodom : string ;  //  переменные должны быть объявлены (имена неважны , я для примера их так назвал)
Stroka_Rezultat : string ;
.....
.....
Stroka_Rezultat := DecodeUTF(Stroka_s_Kodom);
.....
.....
я использовал примерно так ;
st:=HTTPGet('http://n..........................&lang=ru');
Form1.Memo1.Text := DecodeUTF( st) ;

Всем Ку ! ( Дмитрию два раза Ку ! )
Если кому поможет то я писал функцию преобразования юникода в читабельный вид .
Например \u041a\u0438\u0435\u0432\u0441\u043a\u043e\u0435, \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0441\u043a\u0438\u0439 \u043a\u0440\u0430\u0439, \u0420\u043e\u0441\u0441\u0438\u044f  = Киевское, Краснодарский край, Россия

function DecodeUTF(stroka:string):string ;
 var
 dlina,poz : int ;
 symvol,promej: string ;
 f : Boolean ;
begin
  f:=false ;
  dlina := Length(stroka);
  if dlina > 0 then  // Если строка не пустая
    begin
      if pos('\u',stroka)<>0 then   // Если есть юникод
        begin
             While dlina > 0 do
             begin
                poz := pos('\u',stroka);
                if poz > 1 then
                  begin
                    result :=result+ copy(stroka,1,poz-1);
                    Delete(stroka,1,poz-1);
                     dlina := dlina - poz +1 ;

                  end
                else
                  begin
                     if poz>0 then
                        begin
                          symvol:= copy(stroka,5,2);
                          case symvol of
                             '10': promej :=  'А';
                             '30': promej :=  'а';
                             '11': promej :=  'Б';
                             '31': promej :=  'б';
                             '12': promej :=  'В';
                             '32': promej :=  'в';
                             '13': promej :=  'Г';
                             '33': promej :=  'г';
                             '14': promej :=  'Д';
                             '34': promej :=  'д';
                             '15': promej :=  'Е';
                             '35': promej :=  'е';
                             '01': promej :=  'Ё';
                             '51': promej :=  'ё';
                             '16': promej :=  'Ж';
                             '36': promej :=  'ж';
                             '17': promej :=  'З';
                             '37': promej :=  'з';
                             '18': promej :=  'И';
                             '38': promej :=  'и';
                             '19': promej :=  'Й';
                             '39': promej :=  'й';
                             '1a': promej :=  'К';
                             '3a': promej :=  'к';
                             '1b': promej :=  'Л';
                             '3b': promej :=  'л';
                             '1c': promej :=  'М';
                             '3c': promej :=  'м';
                             '1d': promej :=  'Н';
                             '3d': promej :=  'н';
                             '1e': promej :=  'О';
                             '3e': promej :=  'о';
                             '1f': promej :=  'П';
                             '3f': promej :=  'п';
                             '20': promej :=  'Р';
                             '40': promej :=  'р';
                             '21': promej :=  'С';
                             '41': promej :=  'с';
                             '22': promej :=  'Т';
                             '42': promej :=  'т';
                             '23': promej :=  'У';
                             '43': promej :=  'у';
                             '24': promej :=  'Ф';
                             '44': promej :=  'ф';
                             '25': promej :=  'Х';
                             '45': promej :=  'х';
                             '26': promej :=  'Ц';
                             '46': promej :=  'ц';
                             '27': promej :=  'Ч';
                             '47': promej :=  'ч';
                             '28': promej :=  'Ш';
                             '48': promej :=  'ш';
                             '29': promej :=  'Щ';
                             '49': promej :=  'щ';
                             '2a': promej :=  'Ъ';
                             '4a': promej :=  'ъ';
                             '2d': promej :=  'Ы';
                             '4b': promej :=  'ы';
                             '2c': promej :=  'Ь';
                             '4c': promej :=  'ь';
                             '2d': promej :=  'Э';
                             '4d': promej :=  'э';
                             '2e': promej :=  'Ю';
                             '4e': promej :=  'ю';
                             '2f': promej :=  'Я';
                             '4f': promej :=  'я ';  // По окончании написаниия программы удалите пробел после буквы "я"   )))(все останется работоспособным)
                             'b0': promej :=  '°';   // Градусы это ))) , нужны были ....
                          else
                            begin
                              promej:= '\u';
                              f := True ;
                            end;
                          end;

                             result := result + promej ;
                             if f=False then
                                begin
                                 dlina := dlina - 6 ;
                                Delete(stroka,1,6)
                                end
                             else
                                begin
                                Delete(stroka,1,2);
                                dlina := dlina - 2 ;
                                end;
                             f :=False ;

                        end
                      else
                        begin
                        result := result+ stroka;
                        dlina:=0 ;
                        end;

                    end;

                end; // Конец цикла while
         end
       else result := stroka ; // если нет юникода
    end  // if dlina > 0 then  // Если строка не пустая
  else
    begin
       result:='' ;  // Если пустая строка
    end;
end;

41

(7 replies, posted in Russian)

СПС понял .
...привык события описывать сам .В справке, имхо, прояснить сей момент надо.

42

(7 replies, posted in Russian)

Если кликнуть по второму флажку программа падает.
Версия 3.5 Win7x64
http://c2n.me/3N5d4pZ
 

Имя события проблемы:    APPCRASH
  Имя приложения:    123.exe
  Версия приложения:    1.0.0.0
  Отметка времени приложения:    59635e35
  Имя модуля с ошибкой:    ntdll.dll
  Версия модуля с ошибкой:    6.1.7601.23796
  Отметка времени модуля с ошибкой:    59028db3
  Код исключения:    c0000005
  Смещение исключения:    0002ed2a
  Версия ОС:    6.1.7601.2.1.0.768.3
  Код языка:    1049
  Дополнительные сведения 1:    e8ad
  Дополнительные сведения 2:    e8adce1c2b9e7be834b4063ac3c53863
  Дополнительные сведения 3:    e8ad
  Дополнительные сведения 4:    e8adce1c2b9e7be834b4063ac3c53863

В некоторых случаях может понадобиться грид другого вида на подобии журнала учета рабочего времени или школьного журнала успеваемости . То есть заполнение не сверху вниз а с лева на право .( включая редактирование крайнего столбца )
С уважением Яков.

Алексей , я так понимаю есть некоторый товар партия которого произведена при параметрах и условиях указанных в табличках .
Изначально выбран (ИМХО) неверный подход , у Вас свойства партии имеют в свойствах "номер партии". Понимаю что Вы хотели как то  упростить и придать вид всему тому немаленькому количеству свойств но думаю надо было создать таблицу партий со всем тем количеством свойств которые не отъемлемы от номера партии ( кстати нет проверки уникальности при вводе ) , НО упаковать их в текст ( если поиск по свойствам ненужен  )  .

Нужно делать запрос по номеру партии и выводить все результаты из всех форм в таблицу поиска по номеру партии.

Запрос то написать можно ( если хотите напишу ) но Вы представляете какой ширины будет Вывод ?
...и это не учитывая что каждый столбец надо хоть как-то вразумительно подписать .
...а если по ошибке для какого то блока свойств будет введен дважды один номер партии  ?

думаю проект и в текущем виде можно доработать до рабочего ( дабы не запутаться в названиях половина из которых мне непонятна :-D )
если не торопитесь то попробую переделать  Ваш проект в течении недели по наличию времени .

45

(8 replies, posted in Russian)

Тогда вот как то так:

SELECT name FROM imena WHERE name LIKE '{Edit}'

UNION ALL

SELECT name FROM imena WHERE id =
                                  CASE
                                  WHEN (SELECT COUNT(Name) FROM imena WHERE name LIKE '{Edit}')>0 THEN NULL
                                  ELSE 1
                                  END ;

46

(8 replies, posted in Russian)

Для младшей версии сами переделаете , там не сложно

47

(8 replies, posted in Russian)

будет лучше если вы приложите пример или проект так как я , например , не понял что означает
"Не найденные совпадения"
Возможно Вы имели в виду присвоение полю значения по умолчанию ?

48

(54 replies, posted in Russian)

Если записей будет не много то такое решение пойдет
но имейте в виду при большом количестве записей будет тормозить адски
( я не знаю как обстоят дела с кэшем запросов у SQLite в отличие от сервера)
и в таком случае лучше все таки отказаться от вычисляемого поля и написать процедуру заполнения грида скриптом.
Возможно кто то предложит более "красивую" запись запроса.

49

(54 replies, posted in Russian)

...будет Вам с вычисляемым полем , только добавлять запись все равно нужно каким либо способом.
Было бы неплохо видеть проект чтоб понять что не так работает .
( с описанием желаемого )

50

(4 replies, posted in General)

Hi!
Try that.