Пак аз , ама......

12 отговора 330 прегледа
#1

Пак аз , ама......

вече се срамувам от себе си.
Но проблема ми е такъв. MySQL - БД. Посредством ZQuery в DBEdit извеждам резултата и го навигирам DBEdit1.DataField:=ZQuery1.Fields[0].FieldName;
и всичко е точно , но ако река да направя промяна на данните DBEdita не ми позволява. Държи се като readonly.
От ZConection до DBEdit съм махнал ReadOnly.
Моля помогнете . Предварително Благодаря.

Отговор
в отговор на Beden #2

Много срамежлив си станал днес, не е на добре :)

Ами с ZTable как е?
И виж RequestLive на ZTable.

Отговор
в отговор на Beden #3

Re: Пак аз , ама......

Това zQuery има ли RequestLive пропърти, което да е False при теб?

-------------
Special killer double trouble triple extra nicotine monster!
Отговор
в отговор на Beden #4

Re: Пак аз , ама......

Прави сте. Позволява редакция , ама после каква каша настъпва. Не е като Парадокса правиш промяната и минаваш на друг ред а той си се грижи за за записа . Тук генерира няква грешкаааааааааааа.
А ма аз си знам, че ще получа някъв полезен съвет от вас

Отговор
в отговор на Beden #5

Re: Да изразя задоволство

от себе си. Намерих проблема и го споделям за да не се шашкат други аматьори като мен.
Когато използвате ZQery трябва да знаете, че ако например използвате DBGrid и в SQL заявката правиш нещо подобно
Select (IME) Име,(FAM) Фамилия from Name;
за да може в DBGrid имената на колоните да са ти на български
със сигурност ще имате проблеми.

Остава въпроса как сега да ги оправя да са на Български

Отговор
в отговор на Beden #6

Ами на DataSet.Fields[i].DisplayLabel

Но трябва да са създадени филдовете в дизайн или да ги създадеш в рънтайм от филдсдефс, защото ако оставиш на автоматичното създаване - всеки път като отвориш датасета трябва да установяваш дисплей лейбъла.
Ба си как обичам българския език!

Ако ти се четат сорсове, аз така си създавам полетата рънтайм:

{}function CreateField(aTable: tTable; const aFieldName: string; aFieldType: tFieldType; aFieldSize: integer = 0; aFieldRequired: Boolean = false): integer;
// Button2.Caption:=IntToStr(CreateField(Table, Edit1.Text, ftInteger, 0));
// -2: ïîëåòî âå÷å ñúùåñòâóâà, íî ÍÅ ñúâïàäàò aFieldName, aFieldSize èëè aFieldRequired
// -1: ïîëåòî âå÷å ñúùåñòâóâà è ñúâïàäàò aFieldName, aFieldSize è aFieldRequired
// 0: ïîëåòî å ñúçäàäåíî OK;
// 1: exception ïðè ñúçäàâàíå íà ïîëåòî
// $80: íÿêàêâà äðóãà ãðåøêà (Íàïð. aTable=nil)
var
xRecNo : integer;
xFieldDef : tFieldDef;
k : integer;
begin
Result:=2;
if aTable<>nil then begin
xRecNo := -1;
with aTable do begin
try
try
if Active then begin
xRecNo := RecNo;
Active := false;
end;{}
{ Exclusive:=true;
if not Exclusive then begin
raise EDatabaseError.Create('TTable.Exclusive must be set to true in order to add an index to the table');
end;

Open;{}
with FieldDefs do begin


Update;

k:=0; xFieldDef:=nil;
while (k<FieldDefs.Count) and (xFieldDef=nil) do begin
if FieldDefs[k].Name=aFieldName then begin
xFieldDef:=FieldDefs[k];
end else begin
inc(k);
end;
end;
if xFieldDef<>nil then begin
if (xFieldDef.DataType=aFieldType) and (xFieldDef.Size=aFieldSize) and (xFieldDef.Required=aFieldRequired) then begin
Result:=-1;
end else begin
Result:=-2;
end;
end else begin
with AddFieldDef do begin
Name := aFieldName;
DataType := aFieldType;
Required := aFieldRequired;
if aFieldType in ftFixedSizeTypes then begin
Size := 0;
end else begin
Size := aFieldSize;
end;
end;
Result:=0;
end;
end;
{
Close;
Exclusive:=true;
if not Exclusive then begin
raise EDatabaseError.Create('TTable.Exclusive must be set to true in order to add an index to the table');
end;{}
CreateTable;
except
Result:=1;
end;
finally
if xRecNo>=0 then begin
Active := true;
RecNo := xRecNo;
end;
end;
end;
end;
end;


Отговор
в отговор на Beden #7

Re: Да изразя задоволство

Ако заявкатаг ти е една и съща всеки път, можеш да си добавиш колоните в DBGrid-а в design time - всяка колона си има FieldName (на кое поле съответства) и Title (заглавието, което се показва)

Отговор
в отговор на Formal #8

това го оправих още веднага, Но

от вчера се балтавя с някакви си ComboBox-ове.
Значи горе долу проблема е такъв. БД с две колони пр. Ime , Nomer
единият Combo показва Името другият dbCombo номера.
Итемсите и на двата ги зареждам още при FormActivate.
Искам при смяна на единият да се сменя и другият.
Но когато използвам събитието Change на двата ........
май се получава нещо като карамбол. Абе с две думи работата не става

Отговор
в отговор на Beden #9

Трябва ти флаг, за да знаеш ...

... че си започнал такъв процес.
Може би трябва да е привейт на формата, в активате го правиш трю, като влезеш в един от двата чанджа го проверяваш и сменяш, а на излизане го възстановяваш.

[image]//[линк][/image]
Отговор
в отговор на Beden #10

ПП ако си прав за т.н. карамбол: стек оверфлоу!

:)

[image]//[линк][/image]
Отговор
в отговор на NikB #11

Re: ПП ако си прав за т.н. карамбол: стек оверфлоу!

Прав си не е карамбол , но и ефекта не е желаният от мен.
Но как да го направя????

Отговор
в отговор на Beden #12

Re: Пак аз , ама......

Повиках неволята и взех, че криво ляво го оправих.
Искам да попитам само как примерно да намеря индекса/позицията/ в итемс на комбобокса, ако му знам текста. Е разбирасе без да го въртя в цикли.

Предварително Ви благодаря.

Отговор
в отговор на Beden #13

Re: Пак аз , ама......

i:=ComboBox.Items.IndexOf(текст);

Отговор