
Kod: Tümünü seç
CREATE TABLE LANGUAGE (
LANGUAGETEXTSKEYFIELD INTEGER NOT NULL,
LANGUAGEID SMALLINT NOT NULL,
CURRENTID SMALLINT,
SECTION SMALLINT NOT NULL,
TEXTNO INTEGER,
TEXT VARCHAR(100)
);
program açilisinda alttaki sp yi çalistiriyor ve sonuçlari programdaki bir dizi degiþkene aliyorum.
tüm programdada string islemleri bu dizi üzerinden yapiyorum.
Kod: Tümünü seç
CREATE PROCEDURE SP_SELECTLANGUAGE (
V_ACTIVE INTEGER)
RETURNS (
LANGUAGEID SMALLINT,
CURRENTID SMALLINT,
SECTION SMALLINT,
TEXTNO INTEGER,
TEXT VARCHAR(100))
AS
begin
UPDATE LANGUAGE
SET LANGUAGE.CURRENTID = :V_ACTIVE;
FOR SELECT LANGUAGEID,CURRENTID,SECTION,TEXTNO,TEXT FROM LANGUAGE
WHERE LANGUAGE.LANGUAGEID = :V_ACTIVE
INTO LANGUAGEID,CURRENTID,SECTION,TEXTNO,TEXT
DO
BEGIN
suspend;
END
end
sonra programin acilisinda
Kod: Tümünü seç
Procedure ReadTextsFromDB;
var sActiveLine :widestring;
iLastSection,iLastSectionStartPos : integer;
bas,son:integeR;
begin
with DataMod.pFIBDataSetSetLanguage do
begin
Close;
ParamByName('V_ACTIVE').AsInteger := pSistParam^.iLangType; // INI den okunan dil değeri
CloseOpen(TRUE);
First;
while not EOF do
begin
iLastSection:= DataMod.pFIBDataSetSetLanguageSECTION.AsInteger;
iLastSectionStartPos := DataMod.pFIBDataSetSetLanguageTEXTNO.AsInteger;
sActiveLine := DataMod.pFIBDataSetSetLanguageTEXT.Value;
bas:=1;son:=1;
case iLastSection of
1: begin bas:=0; son:= TXT_S_PAUSE_COUNT; end;
2: begin bas:=0; son:= TXT_ALARM_COUNT; end;
3: begin bas:=0; son:= EVENT_COUNT; end;
4: begin bas:=1; son:= TXT_EVENTEX_COUNT; end;
5: begin bas:=1; son:= TXT_SUCHTEXT_COUNT; end;
6: begin bas:=1; son:= TXT_MESSAGES_COUNT; end;
7: begin bas:=1; son:= TXT_TARTSTATTXT_COUNT; end;
8: begin bas:=1; son:= TXT_FIELDLABELS_COUNT; end;
9: begin bas:=1; son:= TXT_CAPTIONS_COUNT; end;
10: begin bas:=1; son:= TXT_BUTTONCAPTIONS_COUNT; end;
11: begin bas:=1; son:= TXT_MENUITEMS_COUNT; end;
12: begin bas:=0; son:= CATEGORY_COUNT; end;
13: begin bas:=1; son:= TXT_INPUT_OUTPUT; end;
14: begin bas:=1; son:= TXT_INPUT_OUTPUT; end;
15: begin bas:=1; son:= TXT_SERVICECAPTION_COUNT; end;
16: begin bas:=1; son:= IZIN_SAYISI; end;
end;//case
if (iLastSectionStartPos>= bas) and (iLastSectionStartPos<= son) then
case iLastSection of
{1 STATEARRAY}1: Txt^.aStateName[iLastSectionStartPos] := sActiveLine;
{2 AlarmArray}2: Txt^.AlarmMsg[iLastSectionStartPos] := sActiveLine;
{3 EventArray}3: Txt^.EventMsg[iLastSectionStartPos] := sActiveLine;
{4 [EventEx]} 4: Txt^.EventEx[iLastSectionStartPos] := sActiveLine;
{5 SuchText} 5: Txt^.SuchText[iLastSectionStartPos] := sActiveLine;
{6 Messages} 6: Txt^.Messages[iLastSectionStartPos] := sActiveLine;
{7 TST } 7: Txt^.TartimStatusTexts[iLastSectionStartPos] := sActiveLine;
{8 FieldLabe} 8: Txt^.FieldLabels[iLastSectionStartPos] := sActiveLine;
{9 Captions} 9: Txt^.Captions[iLastSectionStartPos] := sActiveLine;
{10Captions} 10:Txt^.ButtonCaptions[iLastSectionStartPos] := sActiveLine;
{11MenuItems} 11:Txt^.MenuItems[iLastSectionStartPos] := sActiveLine;
{12Categoames}12:Txt^.CategoryNames[iLastSectionStartPos] := sActiveLine;
13:Txt^.InputOutputName33[iLastSectionStartPos] := sActiveLine;
14:Txt^.InputOutputName22[iLastSectionStartPos] := sActiveLine;
15:Txt^.ServiceCaption[iLastSectionStartPos] := sActiveLine;
{Izinler} 16:Txt^.Izinler[iLastSectionStartPos] := sActiveLine;
end; // of case
Next;
end;//while
Transaction.CommitRetaining;
end;//with
end;
{------------------------------------------------------------------------------}
labelbilmemne.caption := Txt^.Captions[1];
labelbilmemne2.caption := Txt^.Captions[2];
...
şeklinde atamaları gerçekleştiriyorum, ayrıca string işlemler için
format(Txt^.Messages[11],[degisken1,degisken2..])
string içinde %s ler % d ler ile dil kurallarına uygun ceviriler olmasını sağlanıyor. bu sayede kimi programlarda örnekleri olduğu gibi devrik cümleler olmuyor.
bu tablo üzerindede çeşitli import export işlemleri yapıp dil ekleme çıkarma düzenleme işlemleri gerçekleşiyor.
database de string işlemleride view lerde computed field lar ile yapıp delphide parmak kıpırdatmadan yapayırsunuz. örneğin
Kod: Tümünü seç
...
STATUSTEXT COMPUTED BY (((SELECT LANGUAGE.TEXT FROM LANGUAGE WHERE (LANGUAGE.LANGUAGEID=LANGUAGE.CURRENTID) AND (LANGUAGE.SECTION=7) AND (LANGUAGE.TEXTNO=JOBARCHIVE.STATUS)))),
...

hadi kkolay gelsin..
(değişken isimleri karmaşık gelebilir, direk programdan yapıştırdım )