Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: mdid
Дата сообщения: 18.09.2007 12:33
там в основной программе есть Edit1: TEdit;
Edit1.text:=ReadFromReg('11','1'); - error
то я просто химичил и забыл дописать...
skinash
не катит

кста...еси переношу эту функц в основную прогу - работает...видимо чет с dll на я не пойму че
Автор: A_V
Дата сообщения: 18.09.2007 12:39
mdid
наверное здесь:

Цитата:

procedure WriteToReg; external 'work.dll';
function ReadFromReg; external 'work.dll';


у тебя же ф-ия в dll в виде stdcall а в обявлении при импорте ничего об этом не сказано.
т.е по идее должно быть

function ReadFromReg(Programm:string;Value:String):String; stdcall; external 'work.dll';
Автор: skinash
Дата сообщения: 18.09.2007 12:41
mdid
Попробуй вместо srting WideString в DLL
или в uses первым модулем ShareMem, но тогда с программой надо таскать BORLNDMM.DLL.
Автор: mdid
Дата сообщения: 18.09.2007 12:42
A_V
этот вариант я тож писал
закоментил все и оставил
procedure WriteToReg(Programm:string;OpenK:String;Value:String); stdcall; external 'work.dll';
function ReadFromReg(Programm:string;Value:String):String; stdcall; external 'work.dll';

просто как ни крути тогда бы и 1 функция не работала...и если так глянуть то там еще куча фуекций...я просто обрезал для форума
skinash
c widestring помогло...thx


Автор: Botanik_IV
Дата сообщения: 18.09.2007 15:45
Приветствую всех, хотелось бы посоветоваться может кто нить сталкивался, ya&google не помогли...
Я сейчас дописываю одну прогу трабла была сначала в установке исходников, не завязывалась база firebird с делфи, базу приконнектил через localhost:c:\...\x.fdb, после редактирования, прога на моем компе работает нормально без каких либо ошибок, но на др. компах выдает окно: "Unable to complete network request to host "localhost". Failed to establish a connection. Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение"... пробовал на серваке и на еще одном компе в сетке, в чем трабла понять не могу, по google&yandex и прочим в основном пишут что в основном из-за того что нет TCP/IP, localhost не пингуется, не работают сетевые службы... с этим проблем нет все проверял все работает и пингуется, подключение через IBExpert выдает ту же ошибку...

Может кто нибудь что нибудь подскажет...
P.S. К телепатам не отправлять , если нужны какие либо подробности спрашивайте, отвечу...
Автор: mdid
Дата сообщения: 18.09.2007 16:06
так ты клиентом к серверу коннектишься? или просто переносишь прогу с такими же настройками?..И я бы те советовал жестко не привязывать путь к базе в программе
Автор: Botanik_IV
Дата сообщения: 18.09.2007 16:12
mdid
Все на одном компе, просто переношу на др. комп, я может че та не понимаю, но прописанный путь не знаю как влияет(мне кажется только для делфи чтоб нормально приконнектится), у меня на компе стоит 6 копий проги с 6-ю разными базами, все работает...


Цитата:
И я бы те советовал жестко не привязывать путь к базе в программе


А как попроще тогда сделать?
Автор: mdid
Дата сообщения: 18.09.2007 16:24
не знаю как правильно но я всегда путь к базе собираю при запуске программы....при этом умирает такая проблема как переносимость...
- генерация пути при запуске
- банальный выбор бызы из OpenDialog
хз...но обычно я делаю так

ПС
движок interbase?
ПСС
и на твоем компе оно всегда бу работать...ибо ты на нем ставишь дрова(интербейса или другие) и регишь базу...и это все вручную
Автор: Gerasoft
Дата сообщения: 18.09.2007 16:37
Botanik_IV
А база тоже переносится вместе с программой? Или она одна для всех?
Автор: OXDBA
Дата сообщения: 18.09.2007 16:57
Botanik_IV
Порт 3050 открыт?

Добавлено:

Цитата:
хз...но обычно я делаю так

А что мешает использовать alias? Конечно если FB от полуторки и выше.
Автор: Arvur
Дата сообщения: 18.09.2007 18:49
Botanik_IV
Ты fbclient.dll с программой прихватить не забыл?
Если эта библиотека присутствует в system32 или рядом с прогой - проверяй firewall, наличие базы по указанному пути и отсутствие флага readonly на файле базы.

Для динамического пути к базе можно воспользоваться подобной функцией
function HomePath : string;
begin
Result := ExtractFilePath(Application.ExeName);
end;
Автор: Maks150988
Дата сообщения: 18.09.2007 21:37
Хочу обратиться к вам с вопросом. Все строки/диалоги (ну вообщем все что нужно для интерфейса) грузится из ресурсов. Для применения чего-либо к нужному диалогу, использую FindWindow и например использую SetWindowText(FindWindow(nil, 'gagaga'),'gagaga'). Но хочется полной независимости от констант заголовков диалогов - допустим пригодится когда перводишь ресурсы файла. Встречал пример где типа GetDlgItem(хэндл самого диалога и чего-то там) используют вместо FindWindow. Вот это думаю самый приемлемый вариант. Дайте кусок кода для допустим той самой SetWindowText в данном случае.
Автор: OdesitVadim
Дата сообщения: 18.09.2007 21:57
Maks150988
А почему бы при создании не запоминать хендл окна и хранить его себе вместо постоянного поиска. В случае с диалогами, можно пользоваться GetDlgItem, где первый параметр - это хендл диалога, а второй - ID элемента управления, который вы знаете, так как вы его задаёте, когда создаёте диалог в редакторе.
Автор: Maks150988
Дата сообщения: 18.09.2007 22:05
OdesitVadim
А как быть тогда когда использую SetDlgItemText?
Тогда код
SetDlgItemText(GetDlgItem(VERSION_DIALOG,8001), 8001, PChar(GetVersionInfo(ParamStr(0), sfiCompanyName)));
У меня уже 8001 указана в принимающем хэндле и я опять прописываю в ГэтДлгИтем. Тут путаница может возникнуть....
Например если я захочу показать мессаджбокс поверх основго диалога, впринципе вместо хэндла спокойно могу указать hwnd. А так мне приходится использовать FindWindow, если хочу показать окно поверх другого диалога. Для начала подумывал в заголовке ресурсов диалогов фигачить циферки, а потом после findwindow использовать setwindowtext из строкового ресурса. Но тут то же путаница вдальнейшем. Хочется универсальный вариант - то есть грузанулся диалог, заголовок применился и все последующие сообщения/диалоги и прочая лабуда происходила именно с этим диалогом.
Автор: RostY
Дата сообщения: 19.09.2007 08:20
Botanik_IV
fbclient.dll или GDS32.DLL. попробуй вместо локалхост написать 127.0.0.1

Добавлено:
А служба или Firebird guardian на компе запущены ?
Автор: vserd
Дата сообщения: 19.09.2007 08:27
Botanik_IV

Цитата:
Приветствую всех, хотелось бы посоветоваться может кто нить сталкивался, ya&google не помогли...
Я сейчас дописываю одну прогу трабла была сначала в установке исходников, не завязывалась база firebird с делфи, базу приконнектил через localhost:c:\...\x.fdb,

1. Конектишся к одной базе с разных компов или один комп одна база?
Если с разных, тогда localhost для тебя запрещен, используй имя компа.
2. Как задаешь путь к базе (жестко в коде или считываешь), путь на диске правильный, база существует?
3. Если ставишь один комп-одна база, сервер установлен?
4. Клинет установлен?
Автор: Botanik_IV
Дата сообщения: 19.09.2007 10:02
mdid

Цитата:
- генерация пути при запуске
- банальный выбор бызы из OpenDialog

С этого места можно поподробней?


Цитата:
движок interbase?

нет, firebird 2.0.0.12748

Gerasoft
База переносится вместе с прогой...

OXDBA
Firewall'оф нет, брэндмауэр отключен


Цитата:
А что мешает использовать alias? Конечно если FB от полуторки и выше.

а как не подскажете?

Arvur

Цитата:
Ты fbclient.dll с программой прихватить не забыл?
Если эта библиотека присутствует в system32 или рядом с прогой - проверяй firewall, наличие базы по указанному пути и отсутствие флага readonly на файле базы.

Есть gds32.dll, fbclient забыл, записал в каталог с прогой, ошибка та же, флага readonly нет.


Цитата:
Для динамического пути к базе можно воспользоваться подобной функцией
function HomePath : string;
begin
Result := ExtractFilePath(Application.ExeName);
end;

попробую...

RostY

Цитата:
fbclient.dll или GDS32.DLL. попробуй вместо локалхост написать 127.0.0.1
А служба или Firebird guardian на компе запущены ?

gds32.dll была, сейчас еще и fbclient.dll, пробовал прописывать 127.0.0.1 ошибка та же, только соответственно вместо localhost идет 127.0.0.1. Службы не запущены...

vserd
1. Один комп одна база
2. в коде

Добавлено:
И еще gds32.dll есть файл 1523796 байт, есть 425948 байт, данная ошибка появляется при нахождении 1,5mb файла в каталоге с прогой, если записать др gds32 то появляется ошибка:
"Unable to complete network request to host "localhost"
Failed to locate host machine
Undefined service gds_db/tcp "

В каталоге с прогой есть так же fbintl.dll, fbudf.dll, ib_udf.dll, и плюслм сейчас fbclient.dll
Автор: OdesitVadim
Дата сообщения: 19.09.2007 10:55
Maks150988

Цитата:
Например если я захочу показать мессаджбокс поверх основго диалога, впринципе вместо хэндла спокойно могу указать hwnd.

А какая разница между хэндлом и hwnd? Никакой. Два названия одного понятия.
Цитата:
У меня уже 8001 указана в принимающем хэндле и я опять прописываю в ГэтДлгИтем. Тут путаница может возникнуть...

Моя твоя не понимать.

Цитата:
Хочется универсальный вариант - то есть грузанулся диалог, заголовок применился и все последующие сообщения/диалоги и прочая лабуда происходила именно с этим диалогом.

А может маленький класс-обёртку написать? Тогда всё разложиться по полкам.
Но в целом, я слабо представляю "что же хочеться".
Автор: OXDBA
Дата сообщения: 19.09.2007 10:55

Цитата:
И еще gds32.dll есть файл 1523796 байт...
...В каталоге с прогой есть так же fbintl.dll, fbudf.dll, ib_udf.dll, и плюслм сейчас fbclient.dll

Мдя... мне вот интересно, где ты взял gds32.dll от Interbase?
Короче:
1. Проверяешь установлены ли у тебя какие-либо версии IB/FB, если да, то сносишь все, предварительно куда-нибудь положив security2.fdb.
2. Из директории с программой удаляешь все, что ты туда накидал от FB.
3. Поиском по всей машине ищешь gds32 и fbclient, удаляешь все найденное .
4. Ставишь из дистрибутива FB2.01 супер, классик тебе пока лучше не трогать, где взять надеюсь знаешь.
5. При отсутствии проблем с настройками сети все будет работать.

По поводу алиасов см.
1. Релизнутые ноты от FB 1.5(например Firebird_v1.5.4.ReleaseNotes.pdf).
2. Книгу Хелен Борри стр. 104.
3. файл aliases.conf в корне FB.

Добавлено:
Кстати, а FB случайно не Embedded?
Автор: vserd
Дата сообщения: 19.09.2007 11:07
Botanik_IV

Цитата:
Есть gds32.dll, fbclient забыл, записал в каталог с прогой

Как всегда, рвем гланды через зад?
Сервер не устанавливал, клиента тоже. Что тут удивительного....


Цитата:
1. Один комп одна база

Последоватьеность установки.
1. Сервер+клиент Firebird/interbase
2. прога.
либо смотри в сторону Embeded сервера, я с ним не работал, ничем помочь не смогу.
Дальше перезжай в тему по intebase/firebird.


Цитата:
"Unable to complete network request to host "localhost"
Failed to locate host machine
Undefined service gds_db/tcp "

0. Сервер не установлен.
1. netstat -a показывает что слушается 3050 ?
2. в Servises есть gds_db 3050/tcp
Автор: Botanik_IV
Дата сообщения: 19.09.2007 11:17
OXDBA
переинсталировал firebird, gds32 = 389.120б = fbclient.dll

ошибка та же, что и в первом случае...
Автор: OXDBA
Дата сообщения: 19.09.2007 11:18

Цитата:
в Servises есть gds_db 3050/tcp

Для FB уже можно не указывать. Для IB вроде все еще необходимо.

Добавлено:
Botanik_IV
А локальное соединение работает (c:\...\x.fdb)?
Автор: Botanik_IV
Дата сообщения: 19.09.2007 11:22
vserd

Цитата:
Последоватьеность установки.
1. Сервер+клиент Firebird/interbase
2. прога.

??? первоначально по исходникам все работало без firebird на др. компах...

Добавлено:
OXDBA
нет, только через localhost:c:\...\x.fdb, локально не хочет ни в делфи ни в IBE
Автор: OXDBA
Дата сообщения: 19.09.2007 11:25

Цитата:
??? первоначально по исходникам все работало без firebird на др. компах...

Теперь я начинаю сомневаться в том, что мы сможем тебе помочь...
Что значит не хочет? Прямо вот так и пишет, не хочу и все? Ошибку какую возвращает???

Добавлено:
Версия gds32 какая?
Автор: Botanik_IV
Дата сообщения: 19.09.2007 11:37
OXDBA

gds32.dll FileVersion : WI-V2.0.0.12748

Переинстал firebird помогло немного, в делфи и IBE пошло подключение локально... но если запускать на др. компе выдает все ту же ошибку..."Unable to complete network request to host "localhost". Failed to establish a connection. Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение"
Автор: OXDBA
Дата сообщения: 19.09.2007 11:48
Botanik_IV
Тынц
Автор: Botanik_IV
Дата сообщения: 19.09.2007 11:51
OXDBA
попробуем тама



Добавлено:
Не наверно лучше тут:
почитал "Firebird: руководство разработчика баз данных" на 61,62,781,782 стр. по установке embeded вроде все правильно делаю по файлам dll,
А еще забыл проге было:
procedure TMainData.DataModuleCreate(Sender: TObject);
begin
MainDB.Close;
MainDB.DatabaseName := 'localhost:' +ExtractFilePath( GetRealPathName( ParamStr( 0))) + 'xxx.FDB';
MainDB.Open;
end;

Локалхост убрал. появляется ошибка "bad parameters on atach or create database. character set win1251 is not defined"

Добавлено:
Плохо читал. прописал путь к БД в aliase и firebird.conf все пошло...
а можно как нибудь сделать чтобы не прописывать путь к бд, ведь устанавливать будут в любой понравившийся каталог...

Добавлено:
Все вопрос снят все огромное спасибо, в исходники перекинул ехе файл проги все работает, но 2-х компах проверял....
Автор: mfn9
Дата сообщения: 19.09.2007 16:20
Добрый день
такой вопрос
как раскрасить всю строку в StrinGrid
вот так я раскрашиваю ячейку а мне нужно всю строку закрасить
в которой есть текст 'Test'

procedure TMainForm.RzStringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if TRzStringGrid(Sender).Cells[ACol,ARow]='Test' then
with TRzStringGrid(Sender) do
begin
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect);
Canvas.TextRect(Rect, Rect.Left, Rect.Top, TRzStringGrid(Sender).Cells[ACol,ARow]);
end;
end;

Заранее спасибо
Автор: Maks150988
Дата сообщения: 19.09.2007 17:41

Цитата:
А какая разница между хэндлом и hwnd? Никакой. Два названия одного понятия.

Просто код допустим такой:

Код:
const
HWND_MAIN_DIALOG = 'Main';
HWND_ABOUT_DIALOG = 'About';
...
procedure ConfirmExit;
var
String_ConfMessage : String;
String_ConfCaption : String;
begin
SetLength(String_ConfMessage, 255);
LoadString(HInstance, 1627, PChar(String_ConfMessage), 255);
SetLength(String_ConfCaption, 255);
LoadString(HInstance, 1642, PChar(String_ConfCaption), 255);
if MessageBox(FindWindow(nil, HWND_MAIN_DIALOG), PChar(String_ConfMessage), PChar(String_ConfCaption), MB_OKCANCEL or MB_ICONWARNING) <> ID_CANCEL then EndWork;
end;
Автор: OdesitVadim
Дата сообщения: 19.09.2007 19:50
Maks150988
Любят люди делать проблемы на голом месте. Хотя раз вы решили писать всё на винапи, так пиняйте на себя.

Цитата:
const
HWND_MAIN_DIALOG = 'Main';

Это хендл?
Может стоит создать дополнительную функцию, если код часто однотипный?

Цитата:
Просто первоначально хотел самостоятельно указывать номера строк, а компилятор по умолчанию сует их, начиная с 4096 строки. Может быть есть способ обойти данную закавыку?

Создать файл ресурса и слинковать его?
Что бы не набивать файл ресурса, можно взять и разок скомпилировать с параметром -GD

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.