Zum Inhalt springen

witch doctor

Mitglieder
  • Gesamte Inhalte

    145
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von witch doctor

  1. Hallo, im RFC2450 wird ja die Adressvergabe beschrieben. Ich verstehe jedoch nicht, was ich unter TopLevelAggregation ID (TLA) zu verstehen habe. Ist das der Präfix des Providers bzw. eine Art "Vorwahl" für ein Land und Kontinent? Dann wäre da auch noch die NextLevelAggregation ID (NLA). Wer baut dort die Adress Hierarchie auf? Auch ein Provider? SiteLevelAggregator ID (SLA) wird ja von der eigentlichen Organisation benutzt, um Subnetze zu erstellen. Kann ich mir das folgendermaßen vorstellen? Die TLA ist die "Vorwahl" bzw. der Provider Präfix (analog Telefon: 02561 für Ahaus). Die NLA ist die eigentliche Telefonnummer bzw. Adresse und SLA die Subnetze (analog Telefon: eine Zahl zur direkten Durchstellung). Ich hoffe ihr versteht was ich meine. Danke schon mal für eure Hilfe.
  2. Hat niemand eine Idee? Arbeite schon das RFC durch, bis jetzt steht nichts davon drin.
  3. Habe nochmal geguckt. Genauer müsste es heißen, ob das Verfahren von OSPF Lastabhängig sei? Also das Weiterleiten / Routen von Paketen.
  4. Also im Tanenbaum steht es so, dass der Timer entweder gestartet wird, wenn das Datenpaket (in diesem Fall ECHO, um die Verzögerung zu berechnen) in die Warteschlange gestellt wird (wenn mehrere Datenpakete versendet wurden) oder erst wenn das Paket am Anfang der Warteschlange steht. Beim ersteren würde die Last nach Tanenbaum berücksichtigt werden, beim zweiten nicht. Die Frage ist was OSPF, welches ja auf dem Link State Routing Protokoll basiert, macht. Da werde ich irgendwie nicht schlau draus.
  5. In einer Klausur hat mein Netze Prof mal die Frage gestellt (mündlich!), ob OSPF Lastabhängig ist? Die erste Frage meinerseits lautet, was das bedeutet, Lastabhängig. Bedeutet, dass der Timer bereits anfängt zu zählen, wenn sich das Datenpaket in der Warteschlange befindet? Im Tanenbaum ist das nicht ganz ersichtlich. Was würdet ihr sagen, Lastabhängig oder nicht? :confused:
  6. Habe es fertig. Funktioniert aber noch nicht perfekt, aber ich denke, dass man damit die Klausur bestehen könnte. Den Code könnt ihr euch unter http://www.creative.surethings.de/taschenrechner.zip herunterladen. Mich interessiert, ob ihr Fehler findet und wie man diese dann beheben könnte.
  7. Das war mal eine alte Klausur. Also hätte ich die Fonts in der Arbeit auch nicht. sondern nur die Standard Fonts. Hm...mit Fonts würde ich es aber einfacher finden. Habe bis jetzt einfach mal mit dem System Font gearbeitet. Wie schaffe ich es eigentlich, dass er den Text rechts ausgibt? Bei mir gibt er den links aus. Habe das Rechteck, wo es ausgegeben wird nach rechts gelegt und dass es sich nach links aufblähen soll. Aber das klappte nicht. Es wurde nichts angezeigt. Mit Bitmaps haben wir noch nie gearbeitet (kann man aber freilich nachlesen), also erwartet er das auch nicht, und ich weiß auch nicht, ob mir ein Graphik Editor (wie z.B. Photoshop o.ä.) in der Klausur zur Verfügung stehen. Man kann das sicherlich auch im Code zeichnen, aber das ist ganz schön aufwendig, da ich ja nie weiß, wo die Zahl gezeichnet wird. Habt ihr eine Idee? Ich hake aber mal nach, ob wir in der Klausur Photoshop o.ä. (Paint reicht ja auch schon) zur Verfügung haben.
  8. Hallo, wir sollen einen Taschenrechner in MFC programmieren, der folgendermaßen aussehen soll: Meine Frage lautet, ob es solch eine digitale Anzeige schon fertig im MFC gibt oder ob man diese selbst zusammenbasteln muss?
  9. Habe es selbst gelöst. Habe die Funktion LimitText benutzt.
  10. Hallo, ich programmiere für die Vorbereitung auf eine Klausur ein Galgenmännchen Spiel in MFC. Dabei möchte ich, dass der Spieler immer nur EINEN Buchstaben zum Raten in das Edit Feld eingeben darf. Kann man das irgendwie in der Ressource beschränken. Ich habe nämlich leider nichts gefunden.
  11. Hi, habe das Problem gelöst!! Es ist ziemlich egal ob man OnDraw oder OnPaint nimmt. Obwohl in OnPaint funktioniert es. Hier der Code ohne Spiellogik (noch ist ein brutales Invalidate() enthalten, dies sollte man durch invalidaterect(rechteck) oder einem offscreen ersetzen): // spiel.cpp : Implementierungsdatei // #include "stdafx.h" #include "tictactoe.h" #include "spiel.h" #include ".\spiel.h" #include "draw.h" spiel game; // spiel-Dialogfeld IMPLEMENT_DYNAMIC(spiel, CDialog) spiel::spiel(CWnd* pParent /*=NULL*/) : CDialog(spiel::IDD, pParent) { abstand = 5; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { geklickt[i][j]=0; } } for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { inhalt[i][j]=0; } } } spiel::~spiel() { } void spiel::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_RAHMEN, rahmen); } BEGIN_MESSAGE_MAP(spiel, CDialog) ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() // spiel-Meldungshandler void spiel::OnPaint() { UpdateData(TRUE); CPaintDC dc(this); // device context for painting // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein. // CDialog::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden. dc.FillRect(frame,&stdbrush.white); void* oldpen; for(int z=0;z<3;z++) { for(int s=0;s<3;s++) { int x = frame.left+s*feldbreite; int y = frame.top+z*feldhoehe; feld.SetRect(x,y,x+feldbreite,y+feldhoehe); dc.Rectangle(feld); felder[z][s]=feld; } } for(int z=0;z<3;z++) { for(int s=0;s<3;s++) { if(inhalt[z][s]==KREUZ) { oldpen = dc.SelectObject(&stdpen.rgb5); CPoint topleft = gezeichnet[z][s].TopLeft(); CPoint bottomright = gezeichnet[z][s].BottomRight(); int x = topleft.x; int y = topleft.y; int x2 = bottomright.x; int y2 = bottomright.y; dc.MoveTo(topleft); dc.LineTo(bottomright); dc.MoveTo(x,bottomright.y); dc.LineTo(bottomright.x,topleft.y); } if(inhalt[z][s]==KREIS) { oldpen = dc.SelectObject(&stdpen.blue5); dc.Ellipse(gezeichnet[z][s]); } } UpdateData(false); } if(kreuz==true) { oldpen = dc.SelectObject(&stdpen.rgb5); CPoint topleft = kreuz_rechteck.TopLeft(); CPoint bottomright = kreuz_rechteck.BottomRight(); int x = topleft.x; int y = topleft.y; int x2 = bottomright.x; int y2 = bottomright.y; dc.MoveTo(kreuz_rechteck.TopLeft()); dc.LineTo(kreuz_rechteck.BottomRight()); dc.MoveTo(x,bottomright.y); dc.LineTo(bottomright.x,topleft.y); kreuz=false; } else //Kreis { oldpen = dc.SelectObject(&stdpen.blue5); dc.Ellipse(kreis_rechteck); kreuz=true; } } BOOL spiel::OnInitDialog() { CDialog::OnInitDialog(); rahmen.GetWindowRect(&frame); ScreenToClient(&frame); breite = frame.Width(); hoehe = frame.Height(); feldbreite = breite / 3; feldhoehe = hoehe / 3; return TRUE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. } void spiel::OnLButtonDown(UINT nFlags, CPoint point) { UpdateData(TRUE); if(!frame.PtInRect(point)) return; int spalte=point.x/feldbreite; int zeile=point.y/feldhoehe; if(geklickt[zeile][spalte]) return; if(kreuz) { kreuz_rechteck.SetRect(felder[zeile][spalte].TopLeft(),felder[zeile][spalte].BottomRight()); inhalt[zeile][spalte]=KREUZ; gezeichnet[zeile][spalte]=kreuz_rechteck; Invalidate(); geklickt[zeile][spalte]=1; } else //Kreis { kreis_rechteck.SetRect(felder[zeile][spalte].TopLeft(),felder[zeile][spalte].BottomRight()); inhalt[zeile][spalte]=KREIS; gezeichnet[zeile][spalte]=kreis_rechteck; Invalidate(); geklickt[zeile][spalte]=1; } UpdateData(false); CDialog::OnLButtonDown(nFlags, point); } Und hier noch die dazugehörige Headerdatei. Ich habe noch zwei symbolische Konstanten KREUZ und KREIS hinzugefügt, die in der Abfrage des Arrays genutzt werden. #pragma once #include "afxwin.h" #define KREUZ 1 #define KREIS 2 // spiel-Dialogfeld class spiel : public CDialog { DECLARE_DYNAMIC(spiel) public: spiel(CWnd* pParent = NULL); // Standardkonstruktor virtual ~spiel(); CRect frame; CRect felder[3][3]; CRect feld; //int feld[3][3]; int breite; int hoehe; int abstand; int feldbreite; int feldhoehe; bool kreuz; bool kreis; CRect kreuz_rechteck; CRect kreis_rechteck; int geklickt[3][3]; CRect gezeichnet[3][3]; int inhalt[3][3]; // Dialogfelddaten enum { IDD = IDD_spiel }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung DECLARE_MESSAGE_MAP() public: CStatic rahmen; afx_msg void OnPaint(); virtual BOOL OnInitDialog(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); };
  12. Ich kann einmal folgendes Buch empfehlen Webseiten programmieren Das behandelt nicht nur PHP und MySQL, sondern fängt bei HTML an, geht zu PHP und hört bei JSP / ASP auf.
  13. Habe es mal folgendermaßen abgeändert. Die Rechtecke werden in ein 3x3 Array abgespeichert. Nur irgendwie funktioniert das auch nicht, und ich weiß nicht warum. void spiel::zeichnen(CDC* pDC) { /* Hier wird der Fensterinhalt zurückgeschrieben */ for(int z=0;z<3;z++) { for(int s=0;s<3;s++) { pDC->SelectObject(&stdpen.rgb5); // Kreuze neu zeichnen CPoint topleft = r_array[z][s].TopLeft(); CPoint bottomright = r_array[z][s].BottomRight(); int x = topleft.x; int y = topleft.y; int x2 = bottomright.x; int y2 = bottomright.y; pDC->MoveTo(r_array[z][s].TopLeft()); pDC->LineTo(bottomright.x,topleft.y); //Kreise neu zeichnen pDC->SelectObject(&stdpen.blue5); pDC->Ellipse(r_array[z][s]); } } } Der Code zum klicken wurde folgendermaßen verändert: void spiel::OnLButtonDown(UINT nFlags, CPoint point) { if(!frame.PtInRect(point)) return; int spalte=point.x/feldbreite; int zeile=point.y/feldhoehe; if(geklickt[zeile][spalte]) return; if(kreuz) { kreuz_rechteck.SetRect(felder[zeile][spalte].TopLeft(),felder[zeile][spalte].BottomRight()); r_array[zeile][spalte]=kreuz_rechteck; zaehler++; InvalidateRect(kreuz_rechteck,false); geklickt[zeile][spalte]=1; } else //Kreis { kreis_rechteck.SetRect(felder[zeile][spalte].TopLeft(),felder[zeile][spalte].BottomRight()); r_array[zeile][spalte]=kreis_rechteck; zaehler++; InvalidateRect(kreis_rechteck,false); geklickt[zeile][spalte]=1; } CDialog::OnLButtonDown(nFlags, point); } Alles andere ist gleich geblieben.
  14. Nach einer Fehleranalyse habe ich gemerkt, dass er sich immer die vorherige Grafik merkt. Die Boolean Variablen habe ich mal aus OnDraw rausgeschmissen. Hm...stimmt, er soll alles zeichnen. Könnte man das evtl. mit einem Array lösen, welches die Werte ausliest ? (x und y werte) Wie ist denn überhaupt das prinzipielle Vorgehen bei der OnDraw Methode?
  15. Hier ist meine OnPaint Methode, bisher ist es nur das Aussehen: void spiel::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein. // CDialog::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden. dc.FillRect(frame,&stdbrush.white); for(int z=0;z<3;z++) { for(int s=0;s<3;s++) { int x = frame.left+s*feldbreite; int y = frame.top+z*feldhoehe; feld.SetRect(x,y,x+feldbreite,y+feldhoehe); dc.Rectangle(feld); felder[z][s]=feld; } } void* oldpen; if(kreuz==true) { oldpen = dc.SelectObject(&stdpen.rgb5); CPoint topleft = kreuz_rechteck.TopLeft(); CPoint bottomright = kreuz_rechteck.BottomRight(); int x = topleft.x; int y = topleft.y; int x2 = bottomright.x; int y2 = bottomright.y; dc.MoveTo(kreuz_rechteck.TopLeft()); dc.LineTo(kreuz_rechteck.BottomRight()); dc.MoveTo(x,bottomright.y); dc.LineTo(bottomright.x,topleft.y); kreuz=false; kreis=true; } else //Kreis { oldpen = dc.SelectObject(&stdpen.blue5); dc.Ellipse(kreis_rechteck); kreis=false; kreuz=true; } } Die OnDraw Methode ist jetzt so ähnlich wie die OnPaint, doch da passiert es, dass beim Verdecken sich nur willkürlich Grafiken gemerkt werden. Ich verstehe es nicht mehr. void CtictactoeView::OnDraw(CDC* pDC) { CtictactoeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CRect feld; GetClientRect(&feld); game.zeichnen(pDC); } game ist dabei ein extern meiner Spieldatei, wo die OnPaint Methode ausprogrammiert wurde. Die Zeichnen Methode ist dann folgendermaßen: void spiel::zeichnen(CDC* pDC) { pDC->FillRect(frame,&stdbrush.white); for(int z=0;z<3;z++) { for(int s=0;s<3;s++) { int x = frame.left+s*feldbreite; int y = frame.top+z*feldhoehe; feld.SetRect(x,y,x+feldbreite,y+feldhoehe); //dc.Rectangle(feld); pDC->Rectangle(feld); felder[z][s]=feld; } } void* oldpen; if(kreuz==true) { oldpen = pDC->SelectObject(&stdpen.rgb5); CPoint topleft = kreuz_rechteck.TopLeft(); CPoint bottomright = kreuz_rechteck.BottomRight(); int x = topleft.x; int y = topleft.y; int x2 = bottomright.x; int y2 = bottomright.y; pDC->MoveTo(kreuz_rechteck.TopLeft()); pDC->LineTo(kreuz_rechteck.BottomRight()); pDC->MoveTo(x,bottomright.y); pDC->LineTo(bottomright.x,topleft.y); kreuz=false; kreis=true; } else //Kreis { oldpen = pDC->SelectObject(&stdpen.blue5); pDC->Ellipse(kreis_rechteck); kreis=false; kreuz=true; } } kreis und kreuz sind zwei boolean. Dies dient dazu, damit wirklich abwechselnd gespielt wird. Kann mir jemand helfen?
  16. Hi, ich habe so für mich ein kleines TIC TAC TOE Spiel programmiert. Das dumme ist nur, dass die Grafik weg ist, sobald sie von einem Fenster verdeckt wird. Jetzt habe ich gelesen, dass man das mit der OnDraw Methode im View lösen muss. Doch irgendwie blicke ich da nicht durch. Was muss ich da genau machen?
  17. Hi, ich muss innerhalb meines Studiums ein Programm schreiben, welches Werte einliest und auch ausgibt. Ein Menüpunkt hat beschäftigt sich mit der Darstellung einer Tabelle. Das ist auch nicht weiter ein Problem. Das ganze sieht dann so aus: Scrollen kann man in der Tabelle auch und das klappt auch. Ich bekomme jedoch Probleme, wenn das Fenster durch ein anderes verdeckt wird und dann sieht das ganze folgendermaßen aus: Das ist natürlich nicht gewollt. Wie schaffe ich es, dass er den Bereich für das Neuzeichnen eingrenzt? Meine OnPaint Methode sieht bisher folgendermaßen aus: void Tabelle::OnPaint() { CPaintDC dc(this); // device context for painting int az = DemoData.get_anz_z(); //Anzahl Zeilen int as = DemoData.get_anz_s(); //Anzahl Spalten dc.SetBkMode(TRANSPARENT); /* Namen ausgeben */ CRect namen; CString name; CString sp; sp.Format("Spalte:"); CRect spa; spa.SetRect(8*abstand,abstand,0,0); dc.DrawText(sp,-1,&spa,DT_CALCRECT); dc.DrawText(sp,-1,&spa,DT_CENTER|DT_SINGLELINE|DT_VCENTER); namen.SetRect(abstand,2*abstand+feldhoehe,abstand+namenbreite,2*abstand+2*feldhoehe); void *oldfont; oldfont=dc.SelectObject(stdfont.tinybold); for(int i=0;i<az;i++) { name = DemoData.get_rname(i); dc.Rectangle(namen); //Rechteck zeichnen dc.DrawText(name,-1,&namen,DT_LEFT|DT_SINGLELINE|DT_VCENTER); namen.OffsetRect(0,feldhoehe); //Position an der y-Achse verschieben } /* Wertetabelle zeichnen */ //CRect werte; CRect spaltennummern; for(int z=0;z<az;z++) { for(int s=0;s<as;s++) { int wert = DemoData.get_wert(z,s); if(wert<0) { /* Wenn der Wert negativ ist, wird er in roter Schrift geschrieben, ansonsten in schwarz */ dc.SetTextColor(RGB(255,0,0)); } else { dc.SetTextColor(RGB(0,0,0)); } CString ausgabe; ausgabe.Format("%d", wert); //Ausgabe der Werte /* Die aktuelle Position wird abgezogen, damit man in der Tabelle scrollen kann. Die Koordinaten werden so aktualisiert. */ int xs=scrollrect.left+s*feldbreite-actpos; int ys=scrollrect.top; spaltennummern.SetRect(xs,ys,xs+feldbreite,ys+feldhoehe); dc.Rectangle(spaltennummern); CString spaltennummer; spaltennummer.Format("%i",s+1); dc.DrawText(spaltennummer,-1,&spaltennummern,DT_CENTER|DT_SINGLELINE|DT_VCENTER); int x = scrollrect.left+s*feldbreite-actpos; int y = scrollrect.top+abstand+feldhoehe+z*feldhoehe; werte.SetRect(x,y,x+feldbreite,y+feldhoehe); dc.Rectangle(werte); dc.DrawText(ausgabe,-1,&werte,DT_CENTER|DT_SINGLELINE|DT_VCENTER); } } dc.SelectObject(oldfont); } Unser Prof meinte, das wir das ganze über eine Clipping Region lösen sollten, doch so wirklich weiß ich nicht wie ich das machen soll.
  18. Ich mache es jetzt doch mit Strichen. Ich arbeite jetzt mit der LineTo - Methode. Klappt ganz gut. Allerdings sind die Linien jetzt schwarz, was mich nicht überrascht, da dies der Default Wert ist. Wie bekomme ich die Linien grau? Ich habe in der Referenz gelesen, dass dieser den gerade verwendeten Stift benutzt. Wie wähle ich einen Stift aus und benutze diesen? Ich habe mir bereits eine Klasse geschrieben, wo alle benötigten Stifte und Brushes initialisert werden. Ich kann mit stdpen und stdbrush darauf zugreifen. Doch wie schaffe ich es jetzt, dass meine Linie grau wird?
  19. Hallo, in meinem Studium beschäftige ich mich gerade mit der MFC Programmierung. In dieser Vorlesung programmieren wir gemeinsam ein Demo Programm, welches Werte aus einer Tabelle zieht und daraus einen Graph zeichnet. Eine Aufgabe war es, das hinter dem Graphen befindliche Gitternetz zu programmieren. Zusätzlich sollte man x- und y-Raster ein- und ausschalten können. Das ist auch nicht weiter ein Problem (IF Schleife). Das Gitternetz habe ich mit Rechtecken gezeichnet, da mir das am einfachsten und komfortabelsten schien. Alleine sehen die jeweiligen "Gitternetze" (ist ja dann eigentlich noch keins) gut und fürs Auge gleichmäßig aus. Das Dumme ist nur, dass sie sich gegenseitig verdecken. Das ganze sieht also bei mir so aus: bzw. so Das ganze sollte aber so aussehen (entnommen aus der EXE, die der Prof uns zur Verfügung gestellt hat; den Graphen könnt ihr euch erstmal wegdenken): Die Frage ist jetzt, ob die verdeckten Rechtecke gelöscht werden. Wenn das der Fall ist, dann muss man sie sicherlich irgendwie zwischenspeichern. Die Frage ist nur, wie ich das mache. Wenn es nicht gelöscht wird, gibt es eine Möglichkeit, das Rechteck transparent zu füllen? Ich habe wohl in der Klasse brushes, mit Hilfe des MSDN Dienstes, die Stockobjekte "null" und "hollow" gefunden. Doch damit hat das nicht geklappt. Vielleicht habe ich sie auch falsch angewandt. Hat jemand eine Idee? Bin für jeden Tipp dankbar!
  20. Hi, kann mir jemand erklären, was ich bei der Digitalkamera unter Ortsauflösung verstehen kann und welche technischen Komponenten man in diesem Zusammenhang erwähnen kann?
  21. Hallo, eine Frage, was kann ich unter einem ADT Modul verstehen und was ist der Unterschied zu einem Generischen Modul? ADT Modul heißt Abstrakter Datentyp schon klar. Aber was steckt da genau hinter? Wie kann ich mir bspw. ein ADT Modul unter Java vorstellen? Was ist vorteilhaft unter einem generischen Modul gegenüber einem ADT Modul? Ich danke euch bereits für eure Hilfe.
  22. Ich habe lediglich 10 Städte. Trotzdem danke für die Alternativen. Wenn jemand mir einfach die Permuation und die Berechnung etc erklären könnte reicht mir das.
  23. Wir haben in Softwaretechnik eine Aufgabe bekommen das Travelling Salesman Problem zu programmieren. Das Programm lag als C Programm vor und wir sollten es nach Java portieren. Nur da gibt es einige Probleme meinerseits 1. Ich kann kein C und verstehe den Code nicht. Habe mir aber gedacht, dass es halb so schlimm ist. Wenn du den Algorithmus verstanden hast wird das schon gehen. 2. Ich verstehe den Algorithmus nur in der Theorie, aber weiß nicht wie ich ihn umsetzen kann. 3. Ich muss das Programm abgeben und habe noch keine Zeile Code geschrieben. Das Problem läßt sich folgendermaßen beschreiben. Wir haben mehrere Städte und ein Handelsvertreter möchte eine Rundreise machen. Diese sollte Kostengünstig verlaufen. Jedes Stadt (bis auf die Start-Stadt) darf nur einmal vorkommen. Eine Lösung wäre sicherlich durch die ganzen durchzupermutieren. Nur wie realisiere ich das in Java??? Ich habe ehrlich keinen Plan. Die Städte habe ich in einem Array abgelegt und die Entfernungen in einem 2-dimensionalen Array. Theoretisch würde man ja so vorgehen. Man nimmt zuerst die erste Stadt und permutiert dort durch, also so: a b c a c b b a c b c a c a b c b a Damit es aber eine Rundreise wird muss natürlich die Start-Stadt gleichzeitig auch die End-Stadt sein. Nur wie bekomme ich diese Permutation hin und wie speicher ich dann die Entfernungen ab und vergleiche sie?? Den C-Code könnt ihr übrigens hier herunterladen.
  24. Also wie würdet ihr folgende Aufgabe lösen: Stellen Sie sicher, dass nach dem Löschen eines Tupels aus der Tabelle orders immer noch mindestens 100 Einträge vorhanden sind. Also erst dachte ich an einen Trigger, jedoch musste ich herausfinden, als ich die Abfrage in Oracle ausprobiert habe, dass dort Unterabfragen nicht erlaubt sind. Ich hatte es folgendermaßen: create trigger deltriggere before delete on orders for each row when((select count(*) from test)>=10) raiseErr('7003','Invalid Delete'); Dann sagt mir Oracle folgendes: FEHLER in Zeile 3: ORA-02251: Unterabfrage hier nicht zulässig Ok, sagte ich mir im Skript hast du doch etwas über die create assertion Anweisung gelesen und da konnte man laut Skript Subqueries einbauen. Also habe ich folgendes geschrieben: create assertion deltupel check((select count(*) from test)>=10); Laut Prof wäre das auch richtig, nur das dumme ist, Oracle kennt dieses Statement nicht. Dann dachte ich mir, man könnte es in das create table statement mit Hilfe einer Check Klausel einbauen, aber auch da kennt er keine Subqueries. create table test ( testid int, testname varchar(20), testcity varchar(20), primary key(testid), check((select count(*) from test)>=10)); Doch auch hier meckert Oracle und sagt, dass keine Unterabfragen erlaubt seien. Hat jemand eine Idee. Also in der Klausur darf ich ruhig create assertion schreiben, aber mich würde schon interessieren, was ich mache, wenn dieses Statement nicht unterstützt wird. Ach ja, es handelt sich um Oracle 8i.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...