![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
После переброски 'Упаковка' = '#Z SZ#S' = ??? (XP, D2007)
petvv © (2008-06-24 10:41:00)Доброго времени суток !
Проблема такая:
Тупо заполняю таблицу (dbf) недостающими значениями из другой таблицы (то же dbf, выгружена из 1С). Вот код:
Table1.Close;
Nom_1c.Close;
Table1.Active:=True;
Table1.Edit;
Nom_1c.Active:=True;
for n := 1 to Table1.RecordCount do
begin
kod:=Table1.FieldByName('cod_post').AsString;
i:=pos('|',kod);
if i>0 then
// kod:=trim(copy(kod,1,i-1))
kod:=copy(kod,1,i-1)
else
kod:=kod;
firma:=Table1.FieldByName('post').AsString;
Query4.Close;
Query4.SQL.Clear;
// sqlText1:= ' and noml_1c.Kod_post=:firma';
sqlText:='select ed, edp, okei, ISPVZAYAVK, JNVLS, OA, NDS, ZAKBEZPR, SHTRIH from noml_1с where KOD_POST=:kod';// and Post=:firma';
Query4.SQL.Add(sqlText);
Query4.Params[0].AsInteger:=StrToInt(kod);
// Query4.Params[1].AsString:=firma;
Query4.Open;
if query4.RecordCount>0 then
begin
Table1.Edit;
for j := 1 to Query4.RecordCount do
begin
Table1.FieldByName('ed').AsString:=Query4.FieldByName('ed').AsString;
sqlText1:=Query4.FieldByName('edp').Value;
Table1.FieldByName('edp').AsString:=Query4.FieldByName('edp').AsString;
Table1.FieldByName('okei').AsString:=Query4.FieldByName('okei').AsString;
Table1.FieldByName('ISPVZ').AsString:=Query4.FieldByName('ISPVZAYAVK').AsString;
Table1.FieldByName('JNVLS').AsString:=Query4.FieldByName('JNVLS').AsString;
Table1.FieldByName('OA').AsString:=Query4.FieldByName('OA').AsString;
Table1.FieldByName('NDS').AsString:=Query4.FieldByName('NDS').AsString;
Table1.FieldByName('ZAKBEZPR').AsString:=Query4.FieldByName('ZAKBEZPR').AsString ;
Table1.FieldByName('Strich').AsString:=Query4.FieldByName('SHTRIH').AsString;
Query4.Next;
end;
end;
Table1.Next;
end;
end;
и в этом месте
Table1.FieldByName('edp').AsString:=Query4.FieldByName('edp').AsString;
получается Query4.FieldByName('edp').AsString='#Z SZ#S'
Это как так, и как с этим бороться ???
petvv (2008-06-24 12:59:00) [1]
> Обнули тридацый байт заголовка dbf.
Вот это дельный совет.
После обнуления, всё встало на свои места.
Всем респект, тема закрыта
Поросенок Винни-Пух (2008-06-24 12:08:00) [2]dbf из 1С читается в БДЕ?
Обнули тридацый байт заголовка dbf.
ЮЮ (2008-06-24 11:54:00) [3]> такая же лажа
Что и требовалось доказать. Одинаковое расщирение не означает одинаковую СУБД.
И таблице noml_1с место в другой базе (если используешь TDataBase), которую надо настраивать мначе, до тех пор пока в грине не увидишь то, что хочешь.
Правильный-Вася (2008-06-24 11:46:00) [4]
> > Поставь DBGrid и отобрази в нём noml_1с. И в нем все правильно?
> такая же лажа
значит [9]
korneley (2008-06-24 11:42:00) [5]Упаковывать :)
petvv (2008-06-24 11:40:00) [6]
> поля имеют одинаковые имена... можно цыклегом по полям пробежаться
> и не городить три короба кода
а разница то какая ???
> Поставь DBGrid и отобрази в нём noml_1с. И в нем все правильно?
такая же лажа
Slym (2008-06-24 11:37:00) [7]ЮЮ © (24.06.08 11:34) [19]
- операция окончена... следующий!
- а зашивать?
ЮЮ (2008-06-24 11:34:00) [8]> а где Post?
Вызовется автоматом при Next :)
Slym (2008-06-24 11:33:00) [9]petvv (24.06.08 10:41)
if query4.RecordCount>0 then
if not query4.empty then
Slym (2008-06-24 11:31:00) [10]petvv (24.06.08 10:41)
for n := 1 to Table1.RecordCount do
нинадо так... while not Table1.eof do
petvv (24.06.08 10:41)
Query4.SQL.Clear;
нафега на каждой итерации? одного раза мало?
petvv (24.06.08 10:41)
Table1.FieldByName('edp').AsString:=Query4.FieldByName('edp').AsString;
поля имеют одинаковые имена... можно цыклегом по полям пробежаться и не городить три короба кода
petvv (24.06.08 10:41)
Table1.Edit;
а где Post?
ЮЮ (2008-06-24 11:29:00) [11]> соответствует только одна запись
и исходя из этого присктствует код
for j := 1 to Query4.RecordCount do
begin
…
Query4.Next;
end;
petvv (2008-06-24 11:26:00) [12]желание не странное, просто одному коду (который передаётся в параметр запроса) соответствует только одна запись
ЮЮ (2008-06-24 11:25:00) [13]> Ничего я не перепутал, вот структура таблицы:
Поставь DBGrid и отобрази в нём noml_1с. И в нем все правильно?
> Table1.Edit;
> for j := 1 to Query4.RecordCount do
> begin
> Table1.FieldByName('ed').AsString:=Query4.FieldByName('ed').AsString;
>
> Query4.Next;
> end;
> end;
Странное желание в 1 запись Table1 писать несколько записей из Query4
petvv (2008-06-24 11:24:00) [14]CDBF
Правильный-Вася (2008-06-24 11:23:00) [15]и чем содержимое таблицы смотришь?
явно ж не в dbgrid'е
petvv (2008-06-24 11:21:00) [16]Ничего я не перепутал, вот структура таблицы:
KOD |NAME |NAMEFORPRI |ED |EDP |OKEI
010024608 |* Аскорб |* Аскорб ) | 15|Упаковка | 778
petvv (2008-06-24 11:18:00) [17]Ничего я не перепутал, вот структура таблицы:
Name Type Length
KOD Character 200
NAME Character 200
NAMEFORPRI Character 200
ED Character 10
EDP Character 10
OKEI Numeric 15 0
ISPVZAYAVK Character 10
JNVLS Character 10
OA Character 10
NDS Character 10
ZAKBEZPR Numeric 10 0
POST Character 200
KOD_POST Numeric 15 0
PROIZV Character 200
SHTRIH Character 40
KOD |NAME |NAMEFORPRI |ED |EDP |OKEI|ISPVZAYAVK |JNVLS |OA |NDS |ZAKBEZPR |POST |KOD_POST |PROIZV |SHTRIH
010024608 |* Аскорб к-та д/ин. 5% 2мл х 10(09.08) |* Аскорб к-та д/ин. 5% 2мл х 10(09.08) | 15|Упаковка | 778|Нет |Нет |Нет |10% | 0|РОСТА | 122321|Новосибхимфарм - Россия |
Правильный-Вася (2008-06-24 11:14:00) [18]посмотреть:
1. в какой кодировке создана твоя таблица
2. в какой кодировке создана таблица чужая
3. какой langdriver установлен для dbase и foxpro в БДЕ, если ничего не выставлял вручную
Sergey13 (2008-06-24 11:13:00) [19]> [0] petvv (24.06.08 10:41)
> то же dbf, выгружена из 1С
А там никакого шифрования или чего-то подобного нет?
korneley (2008-06-24 11:08:00) [20]Че-то по длине не стыкуется: семь символов супротив восьми. А с чего вообще это знание: " поле edp имеет значение 'упаковка'?" Скорее всего там именно "#Z SZ#S" Может перепутались понятия "Название" и "Содержимое"?