Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

EvSeKo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, помогите. У меня такая беда: есть три переменные l,r и x типа extended.
l=6137
r=0,24221605023
x=l+r
После сложения выходит, что x=6137,2422161
Зачем он округляет? Можно ли как нибудь избавиться от этого, есть ли какие нибудь директивы, отменяющие округление?

Всего записей: 68 | Зарегистр. 22-06-2005 | Отправлено: 16:36 18-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi
Ругается на эту строку  
res := ShellExecuteEx(sei);
Вот такими словами  
Incompatible types: '_SHELLEXECUTEINFOA' and 'PShellExecuteInfoA'

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 16:46 18-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
16:46 18-07-2005
Цитата:
Ругается на эту строку  
res := ShellExecuteEx(sei);  
Вот такими словами    
Incompatible types: '_SHELLEXECUTEINFOA' and 'PShellExecuteInfoA'

Напиши

Код:
res := ShellExecuteEx(@sei);
 
Sorry

----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 16:50 18-07-2005
Dim2004

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EvSeKo

Цитата:
=6137
r=0,24221605023
x=l+r
После сложения выходит, что x=6137,2422161
Зачем он округляет? Можно ли как нибудь избавиться от этого, есть ли какие нибудь директивы, отменяющие округление?

Чего-й то Вы, мил человек, мозги нам сношаете . Следующий кусок кода
 

Код:
procedure TForm1.Button3Click(Sender: TObject);
var l,r,x: extended;
begin
l:=6137;
r:=0.24221605023;
x:=l+r;
ShowMessage(FloatToStr(x))
end;
 

выдаёт именно 6137.24221605023. Так что приводи кусок своей программы, а не набранную на скорую руку чушь.

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 20:04 18-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi
Вроде работает, только процесс не завершается.
Продолжает просить: пресс эникей ту континиори.
 
Добавлено:
А может сэмулировать нажатие пробела? Вот только как это сделать для активного окна?

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 09:00 19-07-2005
EvSeKo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dim2004
 
Всё, спасибо. Ошибку нашёл. Это я во время отладки решил посмотреть чему равняется переменная, навёл мышку на неё, а в подсказке число округлённое.

Всего записей: 68 | Зарегистр. 22-06-2005 | Отправлено: 12:19 19-07-2005
Softerr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
  Возникла проблемка. В связке TTable,TDataSource, TDBGrid. Данные при редактировании в TDBGrid'е сразу же заносятся в базу данных TDataSource'ом, а нужно чтобы данные заносились только тогда, когда пользователь этого хочет (при нажатии кнопочки Save, например).
База данных - BDE, Delphi 7.  

Всего записей: 9 | Зарегистр. 13-07-2005 | Отправлено: 14:31 19-07-2005
GloThin



Тобольский шашлычник
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Softerr
Используй кэширование записей в DBGrid'е и потом при нужном условии сохраненяй в таблице.

Всего записей: 709 | Зарегистр. 28-04-2004 | Отправлено: 14:49 19-07-2005
Softerr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GloThin, спасибо за подсказку, но не мог бы ты точнее сказать как в DBGrid'e сделать это самое кэширование записей и сохранение?

Всего записей: 9 | Зарегистр. 13-07-2005 | Отправлено: 15:22 19-07-2005
aquaman1977



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
 
Не подскажет ли кто, какая процедура в принципе быстрее выполняется:
FillChar(arg,SizeOf(arg),0) или ZeroMemory(addr(arg),SizeOf(arg))?

Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 16:02 19-07-2005
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Softerr
 
Читай справку про TTable.CachedUpdates (TBDETable.CachedUpdates)
 
Все функции, необходимые для работы системы кэшируемых апдейтов, там указаны по ссылке "See also"
 
Добавлено:
aquaman1977
 
встречный вопрос6 что такое функция FillChar  знаю - это из модуля System.  в принципе, она написана на ASM и должна быть достаточно быстрой.
 
А что такое ZeroMemory? IMHO эта функция должна просто вызывать FillChar...

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 17:47 19-07-2005
Softerr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks, спасибо!

Всего записей: 9 | Зарегистр. 13-07-2005 | Отправлено: 18:40 19-07-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks

Цитата:
встречный вопрос6 что такое функция FillChar  знаю - это из модуля System.  в принципе, она написана на ASM и должна быть достаточно быстрой.  
А что такое ZeroMemory? IMHO эта функция должна просто вызывать FillChar...

Я обычно в  таких случаях просто смотрю как она реализована в сорсах, вот

Цитата:
 
procedure ZeroMemory(Mem:Pointer;size:integer);
var
  i:integer;
begin
  for i := 0 to Size-1 do PChar(Mem)[i]:=#0;
end;
 

FillChar да написана на асме.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:02 20-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
09:00 19-07-2005
Цитата:
Вроде работает, только процесс не завершается.  
Продолжает просить: пресс эникей ту континиори.

Странно - у меня даже досовские .BAT файлы со всякими pause тушит (из-под любых виндов).

----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 07:42 20-07-2005
aquaman1977



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks
 
Спасибо. Разобрался!
Гмм, мог бы и сам в сырцах глянуть - не догадался!
Тогда еще один вопрос:
Допустим есть два массива ar1 и ar2 с одинаковой размерностью [0..m, 0..n]
Как оптимальнее всего присвоить значения элементов массива ar2 - элементам массива ar1. На данный момент у меня это реализовано во вложенных циклах по m и n соответственно, вида:
 
for i:=0 to m do
  for j:=0 to n do ar1[m,n]:=ar2[m,n]
 
Может быть это было бы эффективнее реализовать операциями с памятью?  

Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 10:46 20-07-2005 | Исправлено: aquaman1977, 10:49 20-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
aquaman1977
Через копирование памяти
CopyMem(<указатель на источник>,<указатель на приёмник>,<сколько байтиков>)
для масивов указателем будет имя масива, размер - m*n*sizeof(базовый тип)


----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:07 20-07-2005
help777



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
подскажите как реализовать парсинг структурированного текстового файла с занесением данных в бд? пример:

Код:
 
BC2;ИНН;;;300100102861
BC3;НОМЕР ЗАЯВКИ;;;89
O2;ДИСТРИБУТОР;;;Иванов И.И.
O3;ГРУЗОПОЛУЧАТЕЛЬ;;;тот же
O4;АДРЕС ДОСТАВКИ;;;Москва
O6;ДАТА ОТГРУЗКИ;;;07.06.2005
O7;ДАТА ДОСТАВКИ;;;07.06.2005
O8;ВРЕМЯ ДОСТАВКИ;;;01:20
O9;ЗАКАЗ СОСТАВИЛ;;;Сидоров А.А.
O10;ДАТА СОЗДАНИЯ ЗАКАЗА;;;01.07.2005 15:44:06
;товар 1;код1;код2;"400"
;товар 2;код1;код1;"360"
;товар1;12312;12312;"275"
 



----------
Я поэтому здесь и сижу, потому что если вдруг у кого что-то, то вот он я тут и есть...

Всего записей: 775 | Зарегистр. 16-09-2004 | Отправлено: 16:51 21-07-2005 | Исправлено: help777, 16:52 21-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
help777
Построчно, нашел первое  Ox или BCx, значит это шапка накладной, записываем во временный буфер-лога по этой накладной, делаем анализ к какому полю строку отнести и заеносим данные структуры, продолжаем дальше для всех строк не начинающихся с ;
Как только нашли строку с ; нужно проверить полноту данных из шапки наладной. Если не полностью, скидываем эту инфу в лог проблем для ручного разруливания, тудаже скидываем все записи с ; до следующей строки (по желанию можешь проконтролировать тело накладной).
Если все нормально, тогда обрабатываешь тело накладной. Если есть проблемы запись  в лог проблем (в БД не пишешь ничего).
Если все в порядке запись в базу.
Повторяешь для всех строк в файле.
 
По финишу автоматического добавления если есть проблемы, показываешь пользователю диалог в котором даешь ему инфу чего тебе не понравилось в этой накладной (накладную давай полностью). После коррекции пишешь в базу. В базе в обязательном порядке веди лог этих проблемных накладных, для разруливания проблем типа "а я ничего не делал(-а)"
 

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 18:57 21-07-2005
help777



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vserd
большое тебе спасибо за алгоритм , осталось лишь мне его реализовать. Может быть есть у кого подобные решения по парсингу, хотелось бы посмотреть - это бы мне очень сильно помогло. Спасибо.
 


----------
Я поэтому здесь и сижу, потому что если вдруг у кого что-то, то вот он я тут и есть...

Всего записей: 775 | Зарегистр. 16-09-2004 | Отправлено: 19:23 21-07-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
help777

Цитата:
подскажите как реализовать парсинг структурированного текстового файла с занесением данных в бд? пример:

Можно попробовать "поиграться" с Q_String (поищи модуль .pas в инете, если нет - пиши, пошлю). Там много всего. Ну и с StringList. Что-то типа:
var
  MyList: TStringList;
...
        MyList:=TStringList.Create;
        StrBuf:= {твоя строка "пропаренная" QString-ом /убрать лишние ';', пробелы и т.д.}
...
        MyList.Text:=StringReplace(StrBuf,';',#13#10,[rfReplaceAll]); (если разделитель строго ';')
...
       MyList.Strings[1], MyList.Strings[2]... MyList.Strings[...]  
...
        MyList.Free;
---
Можно много чего сделать полезного (если я правильно понял задачу)

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 23:36 21-07-2005 | Исправлено: Z MeZe, 23:45 21-07-2005
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru