500 Faq a delphi által


Mindent a talajvíz elvezetésére. A terület lejtése a lejtőn. valamint mindent a viharos víz csatornázására.

Mi a legjobban a FIBC, mit tegyek a BDE-vel?

1. A tranzakciók paramétereit függetlenül is beállíthatja, még futásidőben is.
2. Számos adatbázisban végezhet tranzakciókat.
3. "Élő" lekérdezéseket közvetlenül több táblára hozhat létre.
4. A FIBC-t használó alkalmazás nem szükséges a BDE támogatásban,
Telepítse és állítsa be.
5. A FIBC használatakor lehetőség van polys használatára
Interbase.
Használhatom a FIBC-t a C ++ Builder-hez?

A VCL különbségei miatt a gyakorlatban kapcsolja össze a FIBC-t a C ++ Builder 1.0-hoz
lehetetlen. A C ++ Builder 3.0 alatt a FIBC-k problémát jelentenek. Ehhez szükséges
Válassza a komponens / új komponens telepítése elemet a Készülék fájlnév mezőben
írja be a FIBDataset.pas fájlt, majd nyomja meg az OK gombot. Ezután kapcsolódnia kell a projekthez
gds32.lib és fordítsd. Ezt követően komponens / telepítési csomagok
adjuk hozzá a csomagot a FIBC-hez, és mindent, a könyvtárat használhatjuk.
Telepített Delphi, FIBC. Miért nem szeretne csatlakozni a fiókjához?

A FIBC rögzített Interbase ügyfél jelenlétét igényli.
Miért érte el a FIBTransaction.Commit összes adatkészlet bezárását?

Az AUTOCOMMIT által a BDE-ben elkényeztetett személy számára,
nem megfelelő és kellemetlen tény, hogy a tranzakció lezárásakor
Az összes adat automatikus lezárása. Ennek a viselkedésnek az oka
nem a FIBC-ben van, hanem az Interbase-ben. A lényeg az, hogy minden
Az Interbase-t csak a tranzakció keretében hajtják végre. Következésképpen,
A programozó maga gondoskodnia kell az adatok újbóli elindításáról és
Az aktuális adatok visszaállítása Commit / Rollback után. Pekomendyem
Használja a TFIBTransaction.CommitRetaining eljárást, amely végrehajtja
A kamera lezárása nélkül kötelezzék el (Standard Interbase funkció).
Hogyan tudok csatlakozni egy adatbázishoz alapértelmezett jelszóval és felhasználói névvel?

1. Ez például így hajtható végre:
a FIBDatabase kezdődik
DBParams.Clear;
DBParams.Add ('isc_dpb_user_name = SYSDBA');
DBParams.Add ('isc_dpb_password = mester kulcs');
UseLoginPrompt: = false;
Csatlakoztatva: = true;
végén;
2. Vagy úgy:
A környezeti változók használata:
az Autoexec.bat fájlban
SET ISC_USER = SYSDBA
SET ISC_PASSWORD = MASTERKEY
de a TFIBDatabase.DBParamokban még mindig legalább regisztrálnia kell magát
lc_ctype = win1251.Nagyon több funkció (vagy bug :))
A DB_Params-ban megadott opciókra vonatkozó isc_dpb_ előtag elhagyható.
Kiepis szimbólumokat akar beilleszteni az asztalba.

Először is tudnia kell, hogy az adatbázis kódlapmal lett létrehozva
win1251. Másodszor, írhat az objektumnapló DBParams tulajdonságára
TFIBDatabase vonal isc_dpb_lc_ctype = WIN1251. Használhatja az isc_dpb_
opyskat.
Amikor egy felvétel felvétele megváltozik, a program lefagy. Pochemy? Nem változtatta meg az adatokat a szerveren, mert nem végeztem el a tranzakciót. Pochemy?

Ezután a tranzakció paramétereinek alapértelmezett beállításai.
Az első esetben várható, hogy a végleges tranzakció befejeződik,
indítsa el a panshe (lehúzás vár), és a második esetben az ok - a mód
no_rec_version a tranzakció sorrendje. Lehetőség van kiválasztani a fent említett problémákat,
nappimep, miután TRParams y egy tárgy túlórása TFIBTransaction tárgyban írt
a következő paramétereket:
isc_tpb_write
isc_tpb_nowait
isc_tpb_read_committed
isc_tpb_rec_version

az isc_tpb_ előtag is elhagyható.
Tényleg nem tud olvasni az Interbase tranzakciók paramétereiről
API Guide (Interbase Mediakit könyvének 46. oldal).
A FIBDataSet.Open meghívásakor rendszeresen hiba lép fel a FetchCurrentRecordToBuffer módszer pbd ^ [i]: = nulla sorában.

Módosítsa a FIBC verziót a kód nehezebb vagy blokkolt szakaszára,
amelyen hiba történik egy egyszerű hibakeresővel.
Hogyan működjünk a FIBC blobokkal?

A munkát foltos mezőkkel vezetjük. FIBDatase1BLOBFIELD - padló
a FIBDatabase1 BLOB adatkészlet típusa

Olvasás az OleContainer egyik blob mezőjéből

var S: TStream;
kezdődik
ha nem, akkor FIBDataset1BLOBFIELD.IsNull
kezdődik
S: = FIBDataset1.CreateBlobStream (FIBDataset1BLOBFIELD, bmRead);
megpróbál
OleContainer1.LoadFromStream (S)
végül
S.Free
végén;
végén;
végén;

Írja be a Blob-mezőt az OleContainer-ből (a BeforePost-ban)

var S: TStream;
kezdődik
S: = FIBDataSet1.CreateBlobStream (FIBDataSet1BLOBFIELD, bmReadWrite);
megpróbál
OleContainer1.SaveToStream (S)
végül
S.Free
végén;
végén;
Hogyan működik az új, interfészei a RemoteDataModule-ban?

(IDispatch (RemoteServer.AppServer), mint a másik)

Megjegyzendő, hogy ez csak akkor működik, ha DCOM-t használja közlekedésként.
Hogyan használhatom a TClientDataSet alkalmazást egy helyi alkalmazásban a Paradox táblákkal, a TProvider és a TRemoteServer összetevők használata nélkül?

Nem lehet megszabadulni a szolgáltató (még, hogy dobja a forma / adatmodulhoz nem kell), de használható TClientDataSet egypontos (egyszintű) alkalmazás. A Client DataSet megnyitásához az adatszolgáltatót kézzel kell hozzárendelni.

A BDEProv modult is be kell illesztenie az Uses záradékba.
A felhasználói név és a jelszó átvitele távoli adatmodulba (távoli adatmodul)?

Távoli adatmodulban tegye le a TDatabase összetevőt, majd adja hozzá az automatizálási eljárást (főmenü Edit | Add To Interface) a bejelentkezéshez.

Ellenőrizze, hogy a HandleShared összetevő TDatabase tulajdonsága True.

Belépés (Felhasználónév, Jelszó: WideString);
kezdődik


DB.DatabaseName: = Felhasználónév + "DB";
DB.Params.Values ​​['USER NAME']: = Felhasználónév;
DB.Params.Values ​​['PASSWORD']: = Jelszó;
DB.Open;
végén;

Miután létrehozta ezt az automatizálási módszert, hívhatja az alábbiak használatával:

RemoteServer1.AppServer.Login ('USERNAME', 'PASSWORD');
Hogyan tudom meghatározni a rendelkezésre álló alkalmazáskiszolgálókat ezen a gépen a rendszerleíró adatbázisban?

Olvassa el a kulcsot a HKEY_CLASSES_ROOT \ CLSID \ * alatt, és nézze meg azokat a kulcsokat, amelyek rendelkeznek a "Borland DataBroker" alkulccsal. Ezek az események az alkalmazáskiszolgálók.

Az alábbiakban egy példát mutat be, amely betölti az elérhető alkalmazáskiszolgálók nevét a Listboxban:

Registry-t használ;
eljárás TForm1.FormCreate (Feladó: TObject);

I: egész szám;
TempList: TStringList;
kezdődik
TempList: = TStringList.Create;
megpróbál
a TRegistry.Create do
megpróbál
RootKey: = HKEY_CLASSES_ROOT;
ha az OpenKey ('CLSID', False) akkor
GetKeyNames (TempList);
CloseKey;
I: = 1 TempList.Count - 1 do
ha a KeyExists ('CLSID \' + TempList [I] + '\ Borland DataBroker') akkor
kezdődik
ha az OpenKey ('CLSID \' + TempList [I] + '\ ProgID', hamis)
majd
kezdődik
Listbox1.Items.Add (ReadString (''));
CloseKey;
végén;
végén;
végül
mentes;
végén;
végül
TempList.Free;
végén;
végén;
A dbclient.dll-t a webes terjesztési lehetőségek "további fájlok" szakaszában vettem fel, de ez a fájl soha nem kerül le a kliensre. Hogyan tudom megjavítani ezt?

Az .inf fájlnak olyan karakterláncokat kell tartalmaznia, mint:

A FileVersion a fájl verziószáma a taxifájlban (ellenőrizze a DBCLIENT verzióinformációit, hogy biztosíthassa a megfelelést).

Győződjön meg róla, hogy a FileVersion a DBCLIENT.DLL verziójára utal.

A cab fájlban a dbclient.dll fájlt a CABARC segédprogrammal lehet beilleszteni, amely a delphi \ bin mappában található.

Példaképpen a CABARC hívásparancs valami ilyesmi lehet:

CABARC N DBCLIENT.CAB DBCLIENT.DLL
Hogyan érhető el az alkalmazáskiszolgáló módszere a TClientDataSet-ből?

Az AppServer egy csak olvasható tulajdonság, amely az alkalmazáskiszolgáló szolgáltató által visszaadott távoli kiszolgálói felületet adja vissza. Az ügyfélalkalmazások ezen interfészen keresztül közvetlenül kommunikálhatnak az alkalmazáskiszolgálóval.
Szükségem van formanyomtatványokra az alkalmazáskiszolgálón?

Nem feltétlenül szükséges, hogy látható legyen, de legalább legyen jelen. Ha a fő formát láthatatlanná szeretné tenni, állítsa be

a projektfájlban.

kezdődik
Application.ShowMainForm: = hamis;
Application.Initialize;
Application.CreateForm (TForm1, Form1);
Application.Run;
végén.
Mit kapok a ConstraintBroker (brokerkorlátozások)?

A ConstraintBroker lehetővé teszi az adatok kényszerellenőrzésének engedélyezését.

Ez azt jelenti, hogy ha adatokat szeretne kérni, akkor velük és azokkal a szabályokkal kell rendelkeznie, amelyeknek meg kell felelniük. Ezek a szabályok automatikusan kiegészítő kód nélkül lépnek érvénybe.

Mivel ez egyetlen kódvonal nélkül történik, nem kell újraírnia vagy frissítenie az alkalmazást minden alkalommal, amikor módosítja a szabályokat.

Valójában ez egyszerű megoldás az ügyfélalkalmazás frissítésének feladata nélkül.

Minden olyan alkalmazás, amely ConstraintBroker-et használ, automatikusan megkapja ezt a minőséget.
Tegyük fel, hogy a felhasználó megváltoztatta a karakterlánc mezőt Null-ban. Hogyan tudom meghatározni az OnUpdateData kezelőben, hogy ez a mező megváltozott-e a Null vonalra, vagy egyszerűen nem lett megváltoztatva a mező?

Használja newValue osztályú ingatlanok TField olvasva a második bejegyzés (az egyik, hogy olyan módosításokat tartalmaz). Ha a visszatérési érték (változat) üres vagy nincs kijelölve, akkor a mező nem módosult.

Íme néhány illusztratív kód:

var
NewVal: Variant;

kezdődik
NewVal: = DataSet.FieldByName ('MyStrField') NewValue;
ha VarIsEmpty (NewVal), akkor
ShowMessage ('Field not edited')
Egyébként, ha VarIsNull (NewVal)
ShowMessage ("mező kitörölték")
más
ShowMessage ('Új mezőérték:' + String (NewVal));
végén;
Ha megnézzük a RecError űrlap forrását (az adattárban), látni fogjuk, hogyan használja ezt az információt a "'amikor adatszinkronizációs hibákat jelenít meg.

A szerver hozzá korlátozások felvételi szintet a megszorítások ingatlan a TQuery / TTable, vagy korlátozza a területi szinten használó TField állandó objektumok (akár a FieldsEditor CustomConstraint vagy ImportedConstraint).

Ha mezőszint-határokat használ, azok akkor lépnek hatályba, amikor az adatok elküldésre kerülnek a mezőre (például, ha elhagyja az ezzel a mezővel társított ellenőrzést (például TDBEdit).
Mi a különbség a socketek, a DCOM és az OLE Enterprise között, amikor szállítást használnak?

Csatlakozók (TCP / IP):
- az ügyfelek és a kiszolgáló TCP / IP-verziót igényel;
- az ügyfelek további konfigurációja nem szükséges;
DCOM:
- az ügyfeleken és a kiszolgálókon a DCOM jelenlétére van szükség (a Windows NT 4.0 tartalmazza, mivel a Windows 95 opcionálisan elérhető)
- ügyfélkonfiguráció szükséges (DCOM Configuration Utility - DCOMCNFG.EXE);
- beépített támogatás a Windows NT biztonsági modellhez;
- visszahívások (módszerek) támogatása;
CORBA
- az ügyfelek és a kiszolgálók közös objektumkérő brókert igényelnek;
- ügyfélkonfiguráció szükséges;
- visszahívások (módszerek) támogatása;
OLE Enterprise:
- az ügyfelek és a kiszolgálók az OLE Enterprise-t igénylik;
- ügyfélkonfiguráció szükséges;
- visszahívások (módszerek) támogatása.
Amikor ApplyUpdates-et alkalmazok a ClientDataSet-re, a kiszolgáló oldalon lévő OnNewRecord esemény nem indul az eredeti adatkészlethez. Hogyan tudom megjavítani ezt?

Nincs mód. Ezek a frissítések közvetlenül a BDE-n keresztül mennek keresztül, nem az adatkészlet-összetevőn keresztül.

A Delphi 4.0 (C ++ Builder 4.0) esetében a helyzet radikálisan megváltozott.

Először is, egy tipikus adatszolgáltató (TProvider) meghatározhatja az adatok frissítésének módját.

Másodszor, az új szolgáltató típus (TDataSetProvider) csak a megfelelő TDataSet módszerekkel működik.

Ez azt jelenti, hogy - az ilyen körülmények között a kiszolgálón lévő összes eseményt a szokásos módon dolgozzák fel.

Ha a Delphi régebbi verzióját használja, akkor a szokásos módon tanácsot adhat a tárolt eljárások használatára, ebben az összefüggésben az alkalmazáskiszolgáló módszerei. Sajnálatos módon a tanács elfogadhatatlan a Socket szállításhoz.
Hogyan válogathatok ki az adatok egy részét az adott pozícióból a kiszolgáló adatkészletéről az ügyfélre?

A leginkább elfogadható a TQuery és a Provider.SetParams használata.

De másképp is teheted:

Először az ügyfélről kell elolvasnia a kiszolgálóról csak az adatkészlet metaadatait. Ezt úgy teheti meg, hogy a PacketRecords értékét 0-ra állítja, majd megnyitja a hívást. Ezután hívja a kiszolgáló módszert (meg kell határoznia ezt a módszert a szerveren), amely a kurzort az első kívánt rekordra helyezi.

Végül, állítsa a PacketRecords-et a helyes értékre, nagyobb mint nulla, és hívja a GetNextPacketet.
Miért nem tudja kezelni a Delphi 3-ban létrehozott ISAPI-orientált könyvtáramokat?

Wizard hogy hozzon létre egy ISAPI DLL Delphi 3 teremt egy teljesen biztonságos többszálas könyvtár, de nem állítja be a zászlót, mondván, a kérelemben, hogy a könyvtár biztonságos ebben a tekintetben.

Ez egyszerűen javítható egyszerű sorok hozzáadásával:

A blokk első sora a kezdeti projektfájl (DPR).
Hogyan készítsünk egy minimális vizsgálati helyességének globális azonosítója (GUID) és interfészek örökölt IDispatch (és ezért támogatjuk automatizálási módszerek)?

Hívja létre a CreateRemoteComObject parancsot, átadva az interfész GUID-jét és annak a számítógépnek a nevét, amelyhez csatlakozni szeretne. Ha a függvény hibát ad vissza, akkor van egy kiszolgálóprobléma, ellenkező esetben a lehetséges probléma az ügyfélre vonatkozik.

const
MyGUID = ''; Bármi is az útmutató.

var
Unk: IUnknown;
Disp: IDispatch;

végén;
Ha ez a kód működik, és a probléma továbbra is fennáll, akkor lépésről lépésre meg kell mennie az ügyfélkódon keresztül, és meg kell találnia, hogy hol repedt. Ha nem találja meg, el kell indítania a kiszolgálót a hibakereső alatt, és kapcsolatot kell létesítenie az ügyféllel, hogy hibakeresést hajthasson végre a helyet adó hely mellett.
Hogyan tudok megszabadulni a "regisztrált" kiszolgálótól, ha nem akarom tovább használni?

Futtassa a kiszolgáló futtatható fájlját a / UNREGSERVER gombbal:

Ez a szokásos módszer egy önbeíró OLE automatizálási kiszolgáló regisztrálásához.
Miután a jobb egérgombbal hoztam létre a szolgáltatói funkciót, hogyan futtathatom újra az Exportálás a táblázattól helyi menü parancsot?

Egy egyszerű példa a fájl másolására (tömörítve vagy nem):

----------
var
srcHandle, destHandle: Integer;
srcBuf, destBuf: TOFStruct;

Ha egyszerre több fájlt kell átmásolni, hatékonyabb a sorrend használata:

var
forrás: string;
forrásHandle: Word;


.
forrás: = 'a: \ anyfile.ext';
.
forrás: = forrás + # 0;
sourceHandle: = _lopen (@forrás [1], READ vagy OF_SHARE_DENY_NONE);
A BITMAP bővítmény módosítása.


Megváltoztattam a kép kiterjesztést a BMP-ről a 3LG-re. Ezután betölteni a * .3LG fájlt képként a Image1 összetevőbe, megadom a parancsot
Image1.Picture.LoadFromFile ('C: \ TEST.3LG');
Hiba történt, hogy a bővítmény helytelen. Hogy juthatok el? (ez ugyanaz a BMP, de én csak megváltoztattam a kiterjesztést)

Lásd az RegisterFileFormat eljárást.

Kapcsolódó cikkek