Forum: PC-Programmierung MySQL -> Gewichte im Journal automatisch setzen -> Wer kennt den richtigen Befehl?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Im Vorhinein:
Ich weiss nicht, od das das richtige Unterforum ist.
Ich bin DAU und weiss über irgendwelche Fachbegriffe aus der IT Welt 
meist nicht Bescheid.
Darum seid bitte nicht so kritisch mit meinen "Fachausdrücken".

Zur Vorgeschichte:
Ich wurde einmal selbstständig und habe am falschen Platz gespart.
Ich habe auf CAO Faktura als WAWI gesetzt, was ich jetzt bereue.
Warum ich das bereue ist einfach:
Wenn man was fragt, wird vom Etwickler sofort betont, wie unwichtig die 
Frage ist und man nicht wüsste, wie schwer er beschäftigt ist. Ich wage 
jetzt keine Diagnose zu stellen, würde aber eher auf Choleriker 
tendieren.
Wichtige Features fehlen einfach im Programm und laut Entwickler wird es 
die auch nie geben, weil er erstens dafür keine Zeit hat und auch sicher 
nicht für ein paar Benutzer entwickelt.
Schade ist, das ich gleich 15 Lizenzen am laufen habe und dies die Mühe 
nicht wert ist.
Das einzige gute ist, das das Program Datenbank basierend ist. (MariaDB 
10.2)

Das schlechteste an der Datenbank bin Ich selbst, dar ich mich damit 
NULL auskenne :-(

Das Vorhaben:
Es gibt ein Rechnungsjournal, in welchem sich die ganzen gebuchten 
Artikel befinden.
Diesen Artikeln sollen !nachträglich! ein Gewicht zugewiesen werden.
Das Gewicht brauche ich für die Vorlage für die Verpackungsverordnung 
beim Lizensierer
und auch zur Gewichtsabrechung laut ElektroG.

Warum habe ich das Gewicht nicht schon früher angegeben:
Es kann erst seit neuen eine komplette Liste exportiert werden.
Das Script und Formular wurde von einem Benutzer im Forum erstellt, da 
es diese Funktion sonst nie geben hat.
Scheinbar verschickt der Entwickler seine Lizenzen nur über Email und 
nicht wie die meisten gewerbetreibende per Post.
Daher ist dieses WICHTIGE Feature für den Entwickler (wieder einmal) 
unwichtig.
Nicht einmal verschiedene Gerätekategorien werden unterstützt.

Die Anfrage:
Eine Nachfrage beim Entwickler ob es möglich ist, das aktuelle Gewicht 
der Artikel !nachträglich!
zu ändern brachte nur hervor, dass er das nicht mache, weil er keine 
Änderungen an der Datenbank unterstützt.
Und was mir überhaupt einfällt, auf so eine Idee zu kommen, weil (ER) 
man das normal nicht braucht.

Was ich von dem System weiss:
Ich habe mit HeidiSQL die Datenbank geöffnet.
Es gibt eine "Tabelle" die "artikel" heisst.
Dort ist das aktuelle Gewicht, die Artikelnummer und vieles mehr zur 
Artikel gespeichert.
Also schon mal notiert:
artikel enthält: ARTNUM
artikel enthält: GEWICHT

Es gibt die wichtigere "Tabelle" die "journalpos" heisst.
Dort ist das Gewicht, die Artikelnummer und vieles mehr zum bereits 
gebuchten Artikel gespeichert.
Also schon mal notiert:
journalpos enthält:  ARTNUM
journalpos enthält:  GEWICHT

Was mir fehlt:
Ein SQL Script, was ich in HeidiSQL ausführen kann und welches mir das 
GEWICHT von der
Tabelle "artikel" in das  GEWICHT von der Tabelle "journalpos" kopiert, 
wenn die ARTNUM stimmt.

Kann mir da jemand behilflich sein?
Leider werden solche Anfragen im CAO Forum gelöscht, weil sie gegen das 
Ego des Entwicklers gehen und eine Datenbank Manipulation darstellen.

mfG
Eure Kirsten

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Kirsten,

Willst Du das Gewicht in "journalpos" überschreiben?

>Tabelle "artikel" in das  GEWICHT von der Tabelle "journalpos" >kopiert,
>wenn die ARTNUM stimmt.

Markus

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> Hallo Kirsten,
>
> Willst Du das Gewicht in "journalpos" überschreiben?

Ja. Da soll das Gewicht von artikel rein.

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Kirsten,

habe von HeidiSQL bis dato noch nichts gehört.
Habe mir geraden den Source-Code herunter geladen, und dabei gesehen, 
dass es sich um Pascal-Code handelt.

Auf die Schnelle kann ich den jetzt nicht kompilieren.
Ist aber für Dein Problem nicht relevant.

Ich bin zwar kein super SQL Experte, habe aber hier und da
damit zu tun.

Was Du brauchst ist eine UPDATE Query in der Form.

UPDATE journalpos SET GEWICHT="X" WHERE 
artikel.ARTNUM=journalpos.ARTNUM;

Da das X Aber kein statischer/konstanter Wert ist,
sondern aus einer anderen Tabelle geholt werden soll,
muss X Durch eine Weitere Abfrage-Query ersetzt werden.

UPDATE journalpos SET GEWICHT=(SELECT GEWICHT FROM artikel WHERE 
artikel.ARTNUM=journalpos.ARTNUM);


Die SQL Update-Query ist noch nicht ganz fertig, zeigt Dir
aber schon mal die Richtung.

Was Du aber machen musst ist ein Backup der Datenbank, oder
beider Tabellen. Wie Du das anstellst, musst Du selber für
Deine Anwendung raus finden.


Falls keine Anderen brauchbaren Antworten kommen, kann ich Dir
eventuell am Nachmittag noch weiter helfen, wenn die Arbeit
getan ist.

Bis dahin viel Erfolg und gutes Gelingen.

Markus.

von Kirsten B. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Leider ghet das nicht so richtig.
Das Problem ist auch, dass mir die Fehlermeldung NULL sagt.
Wie bereits erwähnt, währe eine richtige SQL "Abfrage" zielführend.
Selbstzusammenbauen ist bei mir eben nicht.

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ps.: Anfrage kann auch in der MySQL Konsole ausgeführt werden.

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Sind journalpos und artikel die wirklichen Tabellennamen,
oder hast Du sie nur einet Tabellen-Überschrift entnommen?

mach mal select count(*) from artikel;
und
select count(*) from journalpos;

Das zeigt Dir die Anzahl der Einträge in der Tabelle
und ob der Tabellen-Name stimmt.

Markus

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du eine MySQL Konsole hast,

mach mal show databases;

Und Poste mal hir.

Dann use <den zugehörigen DB-Namen>;

show tabels;

Und poste auch die mal hier.

Dann  mach mal

desc journalpos;

und

desc artikel;

Das zeigt Dir den Tabellenaufbau.


;-) Schnellkurs in MySQL-SQL.

Markus

: Bearbeitet durch User
von Heinerich B. (Firma: keine) (hbmc)


Bewertung
0 lesenswert
nicht lesenswert
Kirsten B. schrieb:
> Das Problem ist auch, dass mir die Fehlermeldung NULL sagt.
Der Tabellenname stimmt nicht.

Entweder ist er wirklich falsch oder die passende DB wo diese Tabellen 
drinn sind wurde nicht vorher ausgewählt.

Mach mal
SHOW DATABASES;


Danach wählt du die passende aus mit
USE derNAmeDerDBmitDenPassendenTabellen;

Zur Kontrolle lässt du dir die Tabellen der ausgewählten Datenbank 
anzeigen:

show tables;

Wenn die Tabellen auftauchen die du oben brauchst ist es die richtige 
DB.

Jetzt kannst du nochmal dein UPDATE.... ausführen.

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Abfragen in HEidiSQL gemacht,
weil es das selbe liefert und besser zu bedienen ist.

Folgendes geht (Liefert plauible Werte zurück):

select count(*) from journalpos;
select count(*) from artikel;

select ARTNUM from journalpos;
select ARTNUM from artikel;
select GEWICHT from journalpos;
select GEWICHT from artikel;

show tables; liefert:
Tables_in_mysql4122
adressen
adressen_asp
adressen_lief
adressen_loesch
adressen_log
adressen_merk
adressen_to_merk
adressen_versicherung
adressen_wgr_rabatt
adressgruppen
anrufe
artikel
artikel_attribut
artikel_attribut_optionen
artikel_bdaten
artikel_bdaten_vkau
artikel_etikett
artikel_historie
artikel_inventur
artikel_inventur_sn
artikel_kat
artikel_kat_ltext
artikel_log
artikel_ltext
artikel_merk
artikel_pakete
artikel_pakete_pos
artikel_preis
artikel_schnellzugriff
artikel_schnellzugriff_log
artikel_sernum
artikel_shop
artikel_stuecklist
artikel_to_attribut
artikel_to_kat
artikel_to_merk
artikel_to_vorgabezeit
artikel_var
back_adressen
back_adressen_asp
back_adressen_lief
back_adressen_loesch
back_adressen_log
back_adressen_merk
back_adressen_to_merk
back_adressen_versicherung
back_adressen_wgr_rabatt
back_adressgruppen
back_anrufe
back_artikel
back_artikel_attribut
back_artikel_attribut_optionen
back_artikel_bdaten
back_artikel_bdaten_vkau
back_artikel_etikett
back_artikel_historie
back_artikel_inventur
back_artikel_inventur_sn
back_artikel_kat
back_artikel_kat_ltext
back_artikel_log
back_artikel_ltext
back_artikel_merk
back_artikel_pakete
back_artikel_pakete_pos
back_artikel_preis
back_artikel_schnellzugriff
back_artikel_schnellzugriff_log
back_artikel_sernum
back_artikel_shop
back_artikel_stuecklist
back_artikel_to_attribut
back_artikel_to_kat
back_artikel_to_merk
back_artikel_to_vorgabezeit
back_artikel_var
back_benutzerrechte
back_benutzerrechte_log
back_blz
back_dep
back_ekbestell
back_ekbestell_info
back_ekbestell_op
back_ekbestell_pos
back_ekeingang
back_ekeingang_pos
back_ekeingang_pos_sernum
back_export
back_export_parameter
back_fibu_ect
back_fibu_ect_export
back_fibu_konten
back_firma
back_gelangen
back_hersteller
back_hersteller_info
back_info
back_inventur
back_journal
back_journal_abschlag
back_journal_op
back_journalpos
back_journalpos_sernum
back_karten
back_kasse_abschluss
back_kasse_abschluss_pos
back_kasse_protokoll
back_kfz
back_lager
back_lager_mengen
back_land
back_lieferarten
back_lieferschein
back_lieferschein_pos
back_lieferzeiten
back_link
back_login
back_mahnung
back_mail
back_mail_adressen
back_mail_anhang
back_mail_konten
back_mail_ordner
back_mail_regeln
back_mengeneinheit
back_mitarbeiter
back_mitarbeiter_log
back_nummern_log
back_pim_aufgaben
back_pim_kontakte
back_pim_termine
back_plz
back_pos_ta
back_produktion
back_produktion_bdaten
back_produktion_fertig
back_produktion_komm
back_produktion_komm_pos
back_produktion_pos
back_produktion_pos_sernum
back_produktion_vorgabezeiten
back_produktion_zeiten
back_projekte
back_rabattgruppen
back_rabmatrix
back_registry
back_registry_log
back_rksv_log
back_schriftverkehr
back_schriftverkehr_adr
back_sprachen
back_textbausteine
back_ueberweisungen
back_umsatzzaehler
back_vertrag
back_vertragpos
back_vertreter
back_vertreter_abr
back_warengruppen
back_warengruppen_log
back_wartung
back_zahlungen
back_zahlungsarten
back_zahlungsarten_log
back_zeiten_aufgaben
back_zeiten_mitarbeiter
back_zeiten_projekt
back_zeiten_stempel
back_zusatzdaten
benutzerrechte
benutzerrechte_log
blz
dep
ekbestell
ekbestell_info
ekbestell_op
ekbestell_pos
ekeingang
ekeingang_pos
ekeingang_pos_sernum
export
export_parameter
fibu_ect
fibu_ect_export
fibu_konten
firma
gelangen
hersteller
hersteller_info
info
inventur
journal
journal_abschlag
journal_op
journalpos
journalpos_sernum
karten
kasse_abschluss
kasse_abschluss_pos
kasse_protokoll
kfz
lager
lager_mengen
land
lieferarten
lieferschein
lieferschein_pos
lieferzeiten
link
login
mahnung
mail
mail_adressen
mail_anhang
mail_konten
mail_ordner
mail_regeln
mengeneinheit
mitarbeiter
mitarbeiter_log
nummern_log
pim_aufgaben
pim_kontakte
pim_termine
plz
pos_ta
produktion
produktion_bdaten
produktion_fertig
produktion_komm
produktion_komm_pos
produktion_pos
produktion_pos_sernum
produktion_vorgabezeiten
produktion_zeiten
projekte
rabattgruppen
rabmatrix
registry
registry_log
rksv_log
schriftverkehr
schriftverkehr_adr
sprachen
textbausteine
ueberweisungen
umsatzzaehler
vertrag
vertragpos
vertreter
vertreter_abr
warengruppen
warengruppen_log
wartung
zahlungen
zahlungsarten
zahlungsarten_log
zeiten_aufgaben
zeiten_mitarbeiter
zeiten_projekt
zeiten_stempel
zusatzdaten

desc journalpos; liefert:
Field  Type  Null  Key  Default  Extra
REC_ID  int(11)  NO  PRI  \N  auto_increment
QUELLE  tinyint(4)  NO  MUL  0  
QUELLE_SUB  tinyint(4)  NO    0  
QUELLE_SRC  int(11)  NO  MUL  -1  
QUELLE_WE  int(11)  NO    -1  
PROJEKT_ID  int(11)  NO    -1  
JOURNAL_ID  int(11)  NO  MUL  0  
JOURNAL_SRC  int(11)  NO    -1  
WARENGRUPPE  int(11)  NO    -1  
ARTIKELTYP  char(1)  NO      
ARTIKEL_ID  int(11)  NO  MUL  -1  
TOP_POS_ID  int(11)  NO    -1  
ADDR_ID  int(11)  NO  MUL  -1  
LTERMIN  date  YES    \N  
ATRNUM  varchar(100)  YES    \N  
VRENUM  varchar(20)  NO      
POSITION  int(11)  NO    0  
VIEW_POS  char(3)  YES    \N  
LVPOS  varchar(255)  YES    \N  
MATCHCODE  varchar(255)  YES    \N  
ARTNUM  varchar(100)  YES    \N  
BARCODE  varchar(20)  YES    \N  
MENGE  decimal(10,3)  NO    0.000  
MENGE_STK  decimal(10,3)  NO    0.000  
LAENGE  varchar(20)  YES    \N  
BREITE  varchar(20)  YES    \N  
HOEHE  varchar(20)  YES    \N  
GROESSE  varchar(20)  YES    \N  
DIMENSION  varchar(20)  YES    \N  
GEWICHT  decimal(10,4)  NO    0.0000  
ME_EINHEIT  varchar(50)  YES    \N  
PR_EINHEIT  decimal(10,3)  NO    1.000  
VPE  decimal(10,3)  NO    1.000  
EK_PREIS  decimal(10,4)  NO    0.0000  
CALC_FAKTOR  decimal(10,5)  NO    0.00000  
EPREIS  decimal(10,4)  NO    0.0000  
GPREIS  decimal(10,2)  NO    0.00  
E_RGEWINN  decimal(10,4)  NO    0.0000  
G_RGEWINN  decimal(10,2)  NO    0.00  
RABATT  decimal(10,2)  NO    0.00  
RABATT2  decimal(10,4)  NO    0.0000  
RABATT3  decimal(10,4)  NO    0.0000  
E_RABATT_BETRAG  decimal(10,4)  NO    0.0000  
G_RABATT_BETRAG  decimal(10,2)  NO    0.00  
STEUER_CODE  tinyint(4)  NO    0  
ALTTEIL_PROZ  decimal(10,2)  NO    0.10  
ALTTEIL_STCODE  tinyint(4)  NO    0  
PROVIS_PROZ  decimal(5,2)  NO    0.00  
PROVIS_WERT  decimal(10,2)  NO    0.00  
GEBUCHT  enum('N','Y')  NO    N  
GEGENKTO  int(11)  NO    -1  
BEZEICHNUNG  text  YES    \N  
BEZEICHNUNG_LAND  text  YES    \N  
POS_TEXT1  varchar(250)  YES    \N  
POS_TEXT2  varchar(250)  YES    \N  
POS_TEXT3  varchar(250)  YES    \N  
POS_DATUM  date  YES    \N  
SN_FLAG  enum('N','Y')  NO    N  
ALTTEIL_FLAG  enum('N','Y')  NO    N  
BEZ_FEST_FLAG  enum('N','Y')  NO    N  
BRUTTO_FLAG  enum('N','Y')  NO    N  
NO_RABATT_FLAG  enum('N','Y')  NO    N  
APOS_FLAG  enum('N','Y')  NO    N  
EKEINGANG  enum('N','Y')  NO    N  
WARENGRUPPENNAME  varchar(250)  YES    \N  
PROJEKT_ARTIKEL  tinyint(1)  NO    0  
FREMD_EPREIS  decimal(10,4)  NO    0.0000  
FREMD_GPREIS  decimal(10,2)  NO    0.00  
ENDS_EPREIS  decimal(10,4)  NO    0.0000  
ENDS_GPREIS  decimal(10,2)  NO    0.00  
ENDS_WG  int(11)  NO    -1  
ENDS_WGNAME  varchar(250)  YES    \N  
PROJEKTPREIS  enum('N','Y')  YES    N  

desc artikel; liefert:
Field  Type  Null  Key  Default  Extra
REC_ID  int(11)  NO  PRI  \N  auto_increment
ARTNUM  varchar(100)  YES  MUL  \N  
ERSATZ_ARTNUM  varchar(100)  YES    \N  
ERSATZ_ARTIKEL_ID  int(11)  NO    -1  
MATCHCODE  varchar(255)  YES  MUL  \N  
WARENGRUPPE  int(11)  NO  MUL  0  
RABGRP_ID  varchar(10)  NO    -  
BARCODE  varchar(40)  YES  MUL  \N  
BARCODE2  varchar(40)  YES    \N  
BARCODE3  varchar(40)  YES    \N  
ARTIKELTYP  char(1)  NO    N  
KURZNAME  varchar(150)  YES    \N  
LANGNAME  text  YES    \N  
KAS_NAME  varchar(150)  YES    \N  
INFO  text  YES    \N  
ME_ID  int(11)  NO    1  
VPE  decimal(10,3)  NO    1.000  
VPE_EK  decimal(10,3)  NO    1.000  
PR_EINHEIT  decimal(10,2)  NO    1.00  
LAENGE  varchar(20)  YES    \N  
BREITE  varchar(20)  YES    \N  
HOEHE  varchar(20)  YES    \N  
GROESSE  varchar(20)  YES    \N  
DIMENSION  varchar(20)  YES    \N  
GEWICHT  decimal(10,4)  NO    0.0000  
INVENTUR_WERT  decimal(5,2)  NO    100.00  
EK_PREIS  decimal(12,4)  NO    0.0000  
EK_VPE  decimal(12,4)  NO    0.0000  
EKDS_PREIS  decimal(12,4)  NO    0.0000  
VK1  decimal(12,4)  NO    0.0000  
VK1B  decimal(12,4)  NO    0.0000  
VK2  decimal(12,4)  NO    0.0000  
VK2B  decimal(12,4)  NO    0.0000  
VK3  decimal(12,4)  NO    0.0000  
VK3B  decimal(12,4)  NO    0.0000  
VK4  decimal(12,4)  NO    0.0000  
VK4B  decimal(12,4)  NO    0.0000  
VK5  decimal(12,4)  NO    0.0000  
VK5B  decimal(12,4)  NO    0.0000  
BASISPR_FAKTOR  decimal(10,5)  NO    1.00000  
BASISPR_ME_ID  int(11)  NO    1  
MAXRABATT  decimal(5,2)  NO    0.00  
MINGEWINN  decimal(5,2)  NO    0.00  
PROVIS_PROZ  decimal(5,2)  NO    0.00  
STEUER_CODE  tinyint(4)  NO    2  
ALTTEIL_FLAG  enum('N','Y')  NO    N  
NO_RABATT_FLAG  enum('N','Y')  NO    N  
NO_PROVISION_FLAG  enum('N','Y')  NO    N  
NO_BEZEDIT_FLAG  enum('N','Y')  NO    N  
NO_EK_FLAG  enum('N','Y')  NO    N  
NO_VK_FLAG  enum('N','Y')  NO    N  
SN_FLAG  enum('N','Y')  NO    N  
FSK18_FLAG  enum('N','Y')  NO    N  
AUTODEL_FLAG  enum('N','Y')  NO    N  
KOMMISION_FLAG  enum('N','Y')  YES    \N  
LIZENZ_FLAG  enum('N','Y')  NO    N  
PRODUKTION_FLAG  enum('N','Y')  NO    N  
NO_STOCK_FLAG  enum('N','Y')  NO    N  
KONFIG  tinyint(1)  NO    0  
KENNZEICHNUNG_FLAG  tinyint(1)  NO    0  
MENGE_FLAG  tinyint(1)  NO    0  
PROD_DAUER  int(5) unsigned  NO    14  
VK_LIEFERZEIT_ID  int(11) unsigned  NO    1  
EK_LIEFERZEIT_ID  int(11) unsigned  NO    1  
MENGE_START  decimal(12,4)  NO    0.0000  
MENGE_AKT  decimal(12,4)  NO    0.0000  
MENGE_MIN  decimal(12,4)  NO    0.0000  
MENGE_BVOR  decimal(12,4)  NO    0.0000  
MENGE_WARN  decimal(12,4)  NO    0.0000  
DEFAULT_LIEF_ID  int(11)  NO    -1  
ERLOES_KTO  int(11)  YES    \N  
AUFW_KTO  int(11)  YES    \N  
HERKUNFTSLAND  char(3)  YES    \N  
HERSTELLER_ID  int(11)  NO    -1  
HERST_ARTNUM  varchar(100)  YES    \N  
LAGERORT  varchar(255)  YES    \N  
PFAND1_ARTIKEL_ID  int(11)  NO    -1  
PFAND1_MENGE  decimal(10,3)  NO    1.000  
PFAND2_ARTIKEL_ID  int(11)  NO    -1  
PFAND2_MENGE  decimal(10,3)  NO    0.000  
ZOLLNUMMER  varchar(250)  YES    \N  
ETIKETT_PRINT  tinyint(3) unsigned  NO    0  
LIEFSTATUS  enum('LAGER','AUSLAUF','AUSGELAUFEN')  NO    LAGER  
LIEFERTERMIN  date  YES    \N  
VARARTNUM  varchar(100)  YES    \N  
VARTEXT  varchar(255)  YES    \N  
VAR_ID  int(11)  YES    -1  
VARNAME  varchar(255)  YES    \N  
NE_ZUSCHLAG_FLAG  enum('N','Y')  NO    N  
NE_GEWICHT  decimal(10,3)  NO    0.000  
NE_TYP  varchar(10)  YES    \N  
ERSTELLT  datetime  YES    \N  
ERST_NAME  varchar(20)  YES    \N  
GEAEND  datetime  YES    \N  
GEAEND_NAME  varchar(20)  YES    \N  
SHOP_ID  tinyint(4)  NO  MUL  -1  
SHOP_ARTIKEL_ID  int(11)  NO    -1  
SHOP_KURZTEXT  text  YES    \N  
SHOP_LANGTEXT  text  YES    \N  
SHOP_IMAGE  varchar(100)  YES    \N  
SHOP_IMAGE_MED  varchar(100)  YES    \N  
SHOP_IMAGE_LARGE  varchar(100)  YES    \N  
SHOP_DATENBLATT  varchar(100)  YES    \N  
SHOP_KATALOG  varchar(100)  YES    \N  
SHOP_ZEICHNUNG  varchar(100)  YES    \N  
SHOP_HANDBUCH  varchar(100)  YES    \N  
AUSSCHREIBUNGSTEXT  varchar(100)  YES    \N  
SHOP_PREIS_LISTE  decimal(12,4)  NO    0.0000  
SHOP_VISIBLE  int(1)  YES    \N  
SHOP_DATE_NEU  date  YES    \N  
SHOP_FAELLT_WEG_AB  date  YES    \N  
SHOP_CLICK_COUNT  int(11)  YES    \N  
SHOP_SYNC  tinyint(1) unsigned  YES    \N  
SHOP_ZUB  tinyint(1) unsigned  YES    \N  
SHOP_CHANGE_DATE  datetime  YES    \N  
SHOP_CHANGE_FLAG  tinyint(1) unsigned  NO    0  
SHOP_DEL_FLAG  enum('N','Y')  NO    N  
SHOP_PASSWORD  varchar(20)  YES    \N  
SHOP_META_TITEL  varchar(255)  YES    \N  
SHOP_META_BESCHR  text  YES    \N  
SHOP_META_KEY  varchar(255)  YES    \N  
SHOP_SORT  int(11) unsigned  NO    0  
SHOP_LIEFSTATUS  int(11) unsigned  NO    1  
SHOP_LIEFTEXT  varchar(255)  NO    Standard  
SHOP_CHANGE_LIEF  int(1) unsigned  NO    0  
USERFELD_01  varchar(255)  YES    \N  
USERFELD_02  varchar(255)  YES    \N  
USERFELD_03  varchar(255)  YES    \N  
USERFELD_04  varchar(255)  YES    \N  
USERFELD_05  varchar(255)  YES    \N  
USERFELD_06  varchar(255)  YES    \N  
USERFELD_07  varchar(255)  YES    \N  
USERFELD_08  varchar(255)  YES    \N  
USERFELD_09  varchar(255)  YES    \N  
USERFELD_10  varchar(255)  YES    \N  
PROJEKT_ARTIKEL  tinyint(1)  NO    0  
ENDS_PREIS  decimal(12,4)  NO    0.0000  
ENDS_WG  int(11)  YES    \N  
HINWEIS  text  YES    \N  

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Heinerich,

wurde schon geposted - von mir ;-)

LG
Markus

von Heinerich B. (Firma: keine) (hbmc)


Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> wurde schon geposted - von mir ;-)
Ja ich habe es nach dem absenden gemerkt. ;)

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Kirsten,

bist Du Dir sicher, dass bei der Menge von Tabellen,
was auf eine gewisse Komplexität schließen lässt, ein
verändern der Tabellen-Inhalte hinten durch die Brust,
sinnvoll ist.

Das back_xxxx lässt drauf schließen, dass die Applikation
selber Backups der Tabellen macht.

Kannst Du die Applikation beenden und dann erst die Daten-
basis modifizieren, oder ist es Dir nicht möglich, weil
Du nur ein Client auf die DBk bist.

Ich kenne leider das zugehörige Programm nicht.

LG
Markus

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt schon erfolgreich folgendes probiert:
UPDATE journalpos SET GEWICHT= 13 WHERE ARTNUM = "001015";

Aber das Gewicht aus der Tabelle "artikel" kann ich nicht zuweisen.
Ausserdem sollten alle ARTNUM im artikel durchgegangen werden.

Es soll nur das Gewicht in journalpos geändert werden.
Das geht ohne Problem.

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
CAO Faktura kann beendet werden.
Ausserdem bin ich Administrator auf dem PC.
Datenbank läuft auf dem PC.

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
OK,

wollte nur sicherstellen, das Du Dein System nicht schrottest
und dann "böse" auf mich bist ;-).

Dann kannst Du ja dich an der Datenbank vergreifen, mit allen
Konsequenzen.

Markus

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Kirsten

hast Du mal geschaut, ob die Anzahl der
Einträge in den beiden Tabellen identisch ist?

select count(*) from journalpos;
select count(*) from artikel;

Die Werte/Resultate hast Du ja nicht gepostet.

Nicht dass Du gewisse Werte änderst und andere wieder nicht
und damit ein gewisses Durcheinander verursachst.
Oder wäre das nicht so schlimm?

Markus

: Bearbeitet durch User
von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das hier geht auch schon:
UPDATE journalpos SET GEWICHT= (select GEWICHT from artikel where ARTNUM 
= "001015") WHERE ARTNUM = "001015";

Wie kann ich eine for Schleife erstellen, welche alle ARTNUM von 000000 
bis 999999 durchgeht?

select count(*) from journalpos; liefert: 23257
select count(*) from artikel; liefert 465

Was ich weiss:
Im Journalpos werden die einzelnen Positionen (Artikel) aufgelistet, 
welche auf einer Rechnung enthalten sind.
Artikel enthält die einzelnen Artikelmerkmale

Leider ist da der CAO Faktura Support so schlecht.
Es gibt ja nicht einmal ein Handbuch / Anleitung dazu.
CAO Faktura Bewertung : Übelst.

von Thomas W. (dbstw)


Bewertung
0 lesenswert
nicht lesenswert
Moin, -

bevor Du mit dem Massenupdate anfaengst (ein vergessenes WHERE aendert 
alles):

- Hast Du ein funktionsfaehiges Backup?

- Kannst Du die Daten erfolgreich wieder einlesen? z.b. auf eine Test-
  Maschine?

Gruesse

Th.

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kann ich beides bejahen :-)
Backup erstellt und auch getestet !

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Kirsten,



>Was ich weiss:
>Im Journalpos werden die einzelnen Positionen (Artikel) aufgelistet,
>welche auf einer Rechnung enthalten sind.

Du willst also "journalpos" (die Rchnungen) mir den
zugehörigen "GEWICHT" aus der Tabelle "artikel" korrigieren.

Bedeutet:
Du suchst Dir von jeder Position aus "journalpos" die "ARTNUM"
raus schaust nach dem zugehörigem "GEWICHT" in "artikel" unter
der "ARTNUM" und kopiertst den "GEWICHT"-wert nach "journalpos.
GWEICHT"

So in etwa.

Das sollte mit einer Query möglich sein.
Werde mal schauen ob ich das hinkriege, oder jemand
schneller ist.

Markus

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Meine Lösung,

bitte testen!!!

UPDATE journalpos SET GEWICHT = (select GEWICHT from journalpos where 
journalpos.ARTNUM=artikel.ARTNUM)
WHERE EXISTS (SELECT ARTNUM FROM journalpos WHERE 
journalpos.ARTNUM=artikel.ARTNUM);

und mögen sich die SQL-Experten melden, wenn ich noch einen
Wurm drin habe.

Markus

: Bearbeitet durch User
von Kirsten B. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Geht leider nicht :-(

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Meine Lösung mit einer Test-DBk.
>sqlite3 ./db.bin
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> CREATE TABLE journalpos (
   ...> ID INTEGER PRIMARY KEY,
   ...> ARTNUM TEXT NOT NULL,
   ...> GEWICHT TEXT NOT NULL);
sqlite> CREATE TABLE artikel (
   ...> ID INTEGER PRIMARY KEY,
   ...> ARTNUM TEXT NOT NULL,
   ...> GEWICHT TEXT NOT NULL);
sqlite> INSERT INTO artikel (ID,ARTNUM,GEWICHT) VALUES(1,'001','10kg');
sqlite> INSERT INTO artikel (ID,ARTNUM,GEWICHT) VALUES(2,'002','20kg');
sqlite> INSERT INTO artikel (ID,ARTNUM,GEWICHT) VALUES(3,'003','30kg');

sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(1,'001','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(2,'001','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(3,'001','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(4,'002','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(5,'002','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(6,'002','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(7,'003','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(4,'003','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(8,'003','0');
sqlite> INSERT INTO journalpos (ID,ARTNUM,GEWICHT) VALUES(9,'003','0');

sqlite> select * from artikel;
1|001|10kg
2|002|20kg
3|003|30kg

sqlite> select * from journalpos;
1|001|0
2|001|0
3|001|0
4|002|0
5|002|0
6|002|0
7|003|0
8|003|0
9|003|0

sqlite> UPDATE journalpos SET GEWICHT = (select GEWICHT from journalpos 
where journalpos.ARTNUM=artikel.ARTNUM)
   ...> WHERE EXISTS (SELECT ARTNUM FROM journalpos WHERE 
journalpos.ARTNUM=artikel.ARTNUM);
Error: no such column: artikel.ARTNUM

Hast recht ist noch ein Wurm drin - eine Augenblick.

Markus

von Markus W. (dl8mby)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Stehe noch auf dem Schlauch.

Laut SQL Konvention werden Tabellennamen
mittels "Punkt" vom Spalten-Namen getrennt.

Bin noch am Suchen.

Markus

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
So nun hat es geklappt!

sqlite> select * FROM journalpos j JOIN artikel a ON j.ARTNUM = 
a.ARTNUM;
1|001|0|1|001|10kg
2|001|0|1|001|10kg
3|001|0|1|001|10kg
4|002|0|2|002|20kg
5|002|0|2|002|20kg
6|002|0|2|002|20kg
7|003|0|3|003|30kg
8|003|0|3|003|30kg
9|003|0|3|003|30kg
sqlite> select GEWICHT FROM journalpos j JOIN artikel a ON j.ARTNUM = 
a.ARTNUM;
Error: ambiguous column name: GEWICHT
sqlite> select j.GEWICHT FROM journalpos j JOIN artikel a ON j.ARTNUM = 
a.ARTNUM;
0
0
0
0
0
0
0
0
0
sqlite> select a.GEWICHT FROM journalpos j JOIN artikel a ON j.ARTNUM = 
a.ARTNUM;
10kg
10kg
10kg
20kg
20kg
20kg
30kg
30kg
30kg
sqlite> select a.GEWICHT FROM journalpos j JOIN artikel a ON j.ARTNUM = 
a.ARTNUM;
10kg
10kg
10kg
20kg
20kg
20kg
30kg
30kg
30kg
sqlite>
sqlite>
sqlite> UPDATE journalpos SET GEWICHT=(select a.GEWICHT FROM journalpos 
j JOIN artikel a ON j.ARTNUM = a.ARTNUM);

sqlite> select * from journalpos;
1|001|10kg
2|001|10kg
3|001|10kg
4|002|10kg
5|002|10kg
6|002|10kg
7|003|10kg
8|003|10kg
9|003|10kg


Markus

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Nur damit es keine Verwirrung gibt.

Oben ist nur mein Fehler-Findungs-Weg dargestellt.
Die richtige Query ist die u.g.

UPDATE journalpos SET GEWICHT=(select a.GEWICHT FROM journalpos
j JOIN artikel a ON j.ARTNUM = a.ARTNUM);

Markus

PS.: Hatte schon lange keinen JOIN in meinen Abfragen, sorry.

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Stop!

ist wohl immer noch der Wurm drin %-)

sqlite> select * from journalpos;
1|001|10kg
2|001|10kg
3|001|10kg
4|002|10kg
5|002|10kg
6|002|10kg
7|003|10kg
8|003|10kg
9|003|10kg

Markus

von ThomasW (Gast)


Bewertung
1 lesenswert
nicht lesenswert
In MySql sollte es eigentlich so gehen:

update journalpos j, artikel a
set j.GEWICHT=a.GEWICHT
where j.ARTNUM=a.ARTNUM;

Aber mal zum Verständnis: ist die Menge im Journal immer 1 oder müsste 
da nicht ein Faktor hin?

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Bei mir klappt es leider noch nicht.



sqlite> update journalpos j, artikel a set j.GEWICHT=a.GEWICHT where 
j.ARTNUM=a.ARTNUM;
Error: near "j": syntax error


Bin etwas am Verzweifeln, der JOIN liefert mir die
richtigen Ergebnisse aber...
sqlite> select a.GEWICHT FROM artikel a JOIN journalpos j ON a.ARTNUM = 
j.ARTNUM;
10kg
10kg
10kg
20kg
20kg
20kg
30kg
30kg
30kg

der UPDATE schreibt nur 10kg in alle GEWICHTe von journalpos.

Irgendwo habe ich noch einen Denkfehler.

Markus

von Kirsten B. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> UPDATE journalpos SET GEWICHT=(select a.GEWICHT FROM journalpos
> j JOIN artikel a ON j.ARTNUM = a.ARTNUM);

von Kirsten B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ThomasW schrieb:
> In MySql sollte es eigentlich so gehen:
>
> update journalpos j, artikel a
> set j.GEWICHT=a.GEWICHT
> where j.ARTNUM=a.ARTNUM;

DAS macht genau das, was ich gesucht habe !
Dankeschön :-D

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
Dann hat SQLite3 eine etwas andere Syntax wie MySQL.
Habe auch was dazu gelernt. Nächsten mal die selbe
DBk zum Testen verwenden.

Dann ist ja Kirsten geholfen und sie hat was neues gelernt ;-)

Markus

von Clemens L. (c_l)


Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> Dann hat SQLite3 eine etwas andere Syntax wie MySQL.

https://www.sqlite.org/lang_update.html#upfrom

von Markus W. (dl8mby)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Clemens,

dem update Schema, siehe PNG, ist ja eine
Komma separierte Liste für Tabellennamen zulässig.

aber,
sqlite> update journalpos j, artikel a set j.GEWICHT=a.GEWICHT where 
j.ARTNUM=a.ARTNUM;
Error: near "j": syntax error

siehe den Fehler.

Markus

von Pandur S. (jetztnicht)


Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt alles gelesen zu haben. Das Tool zum Aendern der Datenbank 
ist phpMyAdmin, Das ist ueblicherweise bei der MariaDB installiert. Das 
erlaubt haendisch zu editieren.

von Sven K. (svenk)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte auch noch mal darauf hinweisen das in Journalpos die 
Zeilenposition eines Belegs auftaucht.
Dh. das Gewicht muss doch bei mehr als 1ner Artikelanzahl multipliziert 
werden.
Durch das Script wurde nur das Gewicht für 1 Stück Geschrieben.

Gruß Sven

von Nick M. (muellernick)


Bewertung
-2 lesenswert
nicht lesenswert
Ich möchte darauf hinweisen, dass das Kopieren eines Spaltenwertes aus 
einer Tabelle in eine Andere klar den Regeln für die Normalformen von 
Datenbanken widerspricht. Sowas ist grundsätzlich falsch.
Und wenn das der Programmierer der DB schon falsch gemacht hat, dann hat 
er das Attribut Trottel.

Das Gewicht eines Artikels kann nur aus der Artikel-Tabelle kommen und 
nur dort vorhanden sein.

https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

von Clemens L. (c_l)


Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> sqlite> update journalpos j, artikel a set j.GEWICHT=a.GEWICHT where
> j.ARTNUM=a.ARTNUM;
> Error: near "j": syntax error

update journalpos set GEWICHT=a.GEWICHT from artikel a where 
journalpos.ARTNUM=a.ARTNUM;

: Bearbeitet durch User
von Horst G. (horst_g532)


Bewertung
0 lesenswert
nicht lesenswert
Nick M. schrieb:
> Und wenn das der Programmierer der DB schon falsch gemacht hat, dann hat
> er das Attribut Trottel.

Und was machen wir jetzt mit dieser Information?
Es ist ja schön, dass du im Studium gelernt hast, was eine 
Datenbanknormalisierung ist, und dieses Wissen hier auch wiedergeben 
kannst. Nur nutzt das hier keinem etwas:
- Die Datenbankstruktur ist gegeben, wird live genutzt und kann nicht 
mal einfach so geändert werden, selbst wenn man wollte (und jemanden 
hätte, der das machen könnte).
- Die Datenbank funktioniert per se; es gibt keinen zwingenden Grund, 
daran was zu ändern. In der realen Welt da draußen, fern des 
akademischen Elfenbeinturms, muss solche Software zuallererst 
funktionieren, weil der Sinn eines Unternehmens ist, Geld zu verdienen. 
Wie die Datenbanksrruktur aussieht, interessiert absolut niemanden, 
solange dadurch keine Kosten (Wartungsaufwand, deutlich verlängerte 
Abfrage-/Ladezeiten usw.) entstehen bzw. vermieden werden können.
- Deine Feststellung ist der Anlass des hier beschriebenen Symptoms, ja. 
Ebenso wurde aber auch schon festgestellt, dass die Software suboptimal, 
der Support nicht vorhanden und der (einzige?) Entwickler etwas 
"speziell" ist – was meinst du also, wird passieren, wenn man dem 
Entwickler nun erklärt, dass sein Datenbankschema Murks ist und dringend 
geändert werden muss?

von Nick M. (muellernick)


Bewertung
-1 lesenswert
nicht lesenswert
Horst G. schrieb:
> Und was machen wir jetzt mit dieser Information?

Evtl. das nochmal lesen?

Kirsten B. schrieb:
> Es gibt ein Rechnungsjournal, in welchem sich die ganzen gebuchten
> Artikel befinden.
> Diesen Artikeln sollen !nachträglich! ein Gewicht zugewiesen werden.
> Das Gewicht brauche ich für die Vorlage für die Verpackungsverordnung
> beim Lizensierer
> und auch zur Gewichtsabrechung laut ElektroG.

Es genügt, aus dem Rechnungsjournal die Artikelnummern zu lesen und dann 
aus der Artikel-Tabelle die Gewichte zu ermitteln.
Die Auswertung wurde ja nicht vom ahnungslosen "Profi" gemacht, sondern 
von einem Anwender, der es auch nicht kann.

Horst G. schrieb:
> was meinst du also, wird passieren, wenn man dem
> Entwickler nun erklärt, dass sein Datenbankschema Murks ist und dringend
> geändert werden muss?

Dem ist es egal. Den Anwendern nicht. Die können es sich immer noch 
anders überlegen.

von Dirk K. (merciless)


Bewertung
2 lesenswert
nicht lesenswert
Nick M. schrieb:
> Horst G. schrieb:
>> Und was machen wir jetzt mit dieser Information?
>
> Evtl. das nochmal lesen?
So wie ich das verstehe, soll die Änderung in der DB
von Hand gemacht werden und dann die Liste mit der
Original-Software gedruckt werden. Und die liest
nunmal das Gewicht aus dem Rechnungsjournal.

Ich hatte im Studium auch Vorlesungen im Fach Datenbanken
und ich habe in meiner ganzen Zeit als Entwickler noch
nicht eine DB gesehen, die dem Optimum entsprochen hätte.
(Außer ich hab sie selber angelegt, aber selbst da muss
man manchmal Kompromisse machen).

merciless

von Nick M. (muellernick)


Bewertung
-2 lesenswert
nicht lesenswert
Dirk K. schrieb:
> und ich habe in meiner ganzen Zeit als Entwickler noch
> nicht eine DB gesehen, die dem Optimum entsprochen hätte.

Was durchaus dazu führen kann, dass derjenige danach kein Entwickler 
mehr für DBen ist.

von Max (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Nick M. schrieb:
> Ich möchte darauf hinweisen, dass das Kopieren eines Spaltenwertes aus
> einer Tabelle in eine Andere klar den Regeln für die Normalformen von
> Datenbanken widerspricht. Sowas ist grundsätzlich falsch.
> Und wenn das der Programmierer der DB schon falsch gemacht hat, dann hat
> er das Attribut Trottel.
>
> Das Gewicht eines Artikels kann nur aus der Artikel-Tabelle kommen und
> nur dort vorhanden sein.
>
> https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Sorry, aber da liegst du leider falsch.

Normalisierung ja. -- ABER NICHT BEI RECHNUNGSRELEVANTEN POSITIONEN ! --
Sinn und Zweck des "Kopierens" dieser Werte ist, dass eine Rechnung auch 
nach X Jahren noch 1:1 aus der Datenbank erstellt werden kann. Sollte 
sich in der Zwischenzeit der Artikelstamm geändert haben und Artikel X 
plötzlich statt 1,2 nun 1,3kg wiegen und statt "Kolossales Meisterwerk" 
nun "Kolossaler Reinfall" heißen, wäre die Rechnung nicht mehr die 
Rechnung von vor 2 Jahren. Du verstehst...

von Nick M. (muellernick)


Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Sollte
> sich in der Zwischenzeit der Artikelstamm geändert haben und Artikel X
> plötzlich statt 1,2 nun 1,3kg wiegen

Dann hätte er eine andere Artikelnummer.

Max schrieb:
> wäre die Rechnung nicht mehr die
> Rechnung von vor 2 Jahren. Du verstehst...

Ich verstehe, dass gestellte Rechnungen in einer anderen Form archiviert 
werden müssen. Früher hat man Kopien abgeheftet, heute legt man PDFs ab.

von Dirk K. (merciless)


Bewertung
0 lesenswert
nicht lesenswert
Nick M. schrieb:
> Dirk K. schrieb:
>> und ich habe in meiner ganzen Zeit als Entwickler noch
>> nicht eine DB gesehen, die dem Optimum entsprochen hätte.
>
> Was durchaus dazu führen kann, dass derjenige danach kein Entwickler
> mehr für DBen ist.

???

Hast du mal Datenbanken gesehen, die über Jahrzehnte
gewachsen sind und produktiv eingesetzt werden?
Mal an einem Projekt gearbeitet, dass eine solche DB
verwenden/erweitern muss? 90% meiner Tätigkeit hatte
ich die Ehre. Und nein, meistens ist es nicht möglich,
einfach Änderungen herbeizuführen, weil hunderte
andere Applikationen/Skripte auch auf die Daten zugreifen
und man nicht alle ändern kann/darf.

Komm mal runter von deinem Elfenbeinturm!

merciless

von JKa (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Max schrieb:
> Nick M. schrieb:
>> Ich möchte darauf hinweisen, dass das Kopieren eines Spaltenwertes aus
>> einer Tabelle in eine Andere klar den Regeln für die Normalformen von
>> Datenbanken widerspricht. Sowas ist grundsätzlich falsch.
>> Und wenn das der Programmierer der DB schon falsch gemacht hat, dann hat
>> er das Attribut Trottel.
>>
>> Das Gewicht eines Artikels kann nur aus der Artikel-Tabelle kommen und
>> nur dort vorhanden sein.
>>
>> https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
>
> Sorry, aber da liegst du leider falsch.
>
> Normalisierung ja. -- ABER NICHT BEI RECHNUNGSRELEVANTEN POSITIONEN ! --
> Sinn und Zweck des "Kopierens" dieser Werte ist, dass eine Rechnung auch
> nach X Jahren noch 1:1 aus der Datenbank erstellt werden kann. Sollte
> sich in der Zwischenzeit der Artikelstamm geändert haben und Artikel X
> plötzlich statt 1,2 nun 1,3kg wiegen und statt "Kolossales Meisterwerk"
> nun "Kolossaler Reinfall" heißen, wäre die Rechnung nicht mehr die
> Rechnung von vor 2 Jahren. Du verstehst...

Ja, stimmt, aber deswegen versieht ein SW-Architekt auch Stammdaten mit 
einer Version inkl. Gültig-Von und Gültig-Bis oder alternativ Status 
Blocked, Draft, Active, ... (wobei nur eine Version aktiv sein kann)
Erst dann kommt man einer Revision-Sicherheit näher.
Aber das scheint hier ja eh keinen zu interessieren, wenn man auf 
DB-Ebene Daten verändert. Da ich im regulierten Umfeld tätig bin, würde 
ich damit mit einem Bein im Knast stehen, und das ist leider nicht 
übertrieben.

von Udo S. (urschmitt)


Bewertung
-1 lesenswert
nicht lesenswert
Nick M. schrieb:
> Was durchaus dazu führen kann, dass derjenige danach kein Entwickler
> mehr für DBen ist

Wenn das so wäre, dann wärst du wahrscheinlich fast der einzige 
Datenbankentwickler auf der ganzen Welt.

Ich bin kein Datenbankprofi, habe aber in den letzten 20 Jahren immer 
wieder mit Datenbanken zu tun.
Da gibts nicht eine, die völlig normalisiert ist.

Trotzdem machen wir mit den Produkten zur Zeit 20 Millionen Umsatz pro 
Jahr, Tendenz steigend, und das seit über 15 Jahren.

Was haben wir nur falsch gemacht?

von Nick M. (muellernick)


Bewertung
0 lesenswert
nicht lesenswert
Udo S. schrieb:
> Was haben wir nur falsch gemacht?

"Funktioniert doch" war schon immer ein "gutes" Argument dagegen etwas 
richtig zu machen.

von Markus W. (dl8mby)


Bewertung
0 lesenswert
nicht lesenswert
@Clemens L.

sqlite> update journalpos set GEWICHT=a.GEWICHT from artikel a where 
journalpos.ARTNUM=a.ARTNUM;
Error: near "from": syntax error  %-)


Markus

von leo (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
JKa schrieb:
> Version inkl. Gültig-Von und Gültig-Bis oder alternativ Status
> Blocked, Draft, Active

Aha. Du hast also viel Erfahrung in der Praxis mit grossen 
Datenmengen, wo die Abfragezeit eine Rolle spielt ;)

leo

von Clemens L. (c_l)


Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> Error: near "from": syntax error

UPDATE FROM gibt es seit Version 3.33.0.

von Philipp K. (philipp_k59)


Bewertung
0 lesenswert
nicht lesenswert
UPDATE `journalpos` jp
LEFT JOIN `artikel` art ON jp.ARTNUM = art.ARTNUM
SET jp.GEWICHT=art.GEWICHT;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.