[ADO, MSSQL 2005] Invalid column name

0

Mam dziwny problem. Od pewnego czasu nie działa mi fragment programu. Dziwne jest to o tyle, że nie modyfikowałem go od dawna. Uparcie otrzymuję wyjątek: Project FSIP.exe raised exception with message "Invalid column name CrimperNo". Co on onzacza doskonale wiem. Nie wiem natomiast dlaczego się pojawia. Tabela w bazie wygląda tak:

CREATE TABLE Crimper(
  IDCrimper   SMALLINT PRIMARY KEY IDENTITY(1,1),
  PartTypeID  SMALLINT FOREIGN KEY REFERENCES PartType(IDPartType),
  Date        SMALLDATETIME,
  Crew        VARCHAR(3),
  Shift       TINYINT,
  CrimperNo   TINYINT,
  QuantityOK  SMALLINT,
  QuantityNG  SMALLINT,
  SAPNumber   VARCHAR(12),
  Tag         VARCHAR(255)
);

W ADOQuery mam zapytanie:

SELECT
  PartType.PartName,
  PartType.SAP,
  IDCrimper, 
  PartTypeID,
  Date,
  Crew,
  Shift,
  CrimperNo, <=======
  QuantityOK,
  QuantityNG,
  SAPNumber,
  Tag
FROM
  Crimper
INNER JOIN
  PartType ON Crimper.PartTypeID = PartType.IDPartType
WHERE
  (Crimper.Date = :_Date)
ORDER BY Crew, CrimperNo;

To działa bez zastrzeżeń.

Nastepnie mam okno do generowania zapytań odnośnie raportów. Przykładowe zapytanie, które generuje owy wyjątek

    SELECT
      Day(Date) AS 'Lp',
      Sum(QuantityOK) AS 'QuantityOK',
      Sum(QuantityNG) AS 'QuantityNG' 
    FROM
      Crimper
    WHERE
      (Date BETWEEN '2007-10-01' AND '2007-10-31') AND (CrimperNo = 1)
    GROUP BY Date
    ORDER BY Date ASC;

Przy czym jeżeli odpalam je z poziomu menadżera zapytań MSSQL Server 2005 wszystko idzie gładko.
Szukałem literówek, przekleiłem nazwę kolumny z kodu SQL i nic. Cały czas wywala nie znaleziono kolumny, gdzie wcześniej ten sam komponent bez problemu sobie radzi.

Pojęcia nie mam co jest.

0

debuguj

0

Problem jest w tym, że wszystko działało dwa dni temu. Nie ruszałem kompletnie tego obszaru kodu i ni z tąd zaczęło się sypać.

0

Spróbuj użyć aliasów w instrukcji select

0

Błąd znaleziony. Nie pytajcie się co było bo wstyd i tak nie pozwoli mi się przyznać.

0
Oleksy_Adam napisał(a)

Błąd znaleziony. Nie pytajcie się co było bo wstyd i tak nie pozwoli mi się przyznać.

Przyznaj się, przyznaj - lubimy samobiczowanie innych [diabel]

0

Niech będzie, może ktos dzięki temu uniknie podobnych cyrków.

A więc mam dwie tabele, jedna przechowuje plan produkcji dla różnych maszyn, druga wyniki.

CREATE TABLE MTarget(
  IDMTarget  INTEGER PRIMARY KEY IDENTITY(1,1),
  Date       SMALLDATETIME,
  MachineNo  TINYINT,
  MName      VARCHAR(2),
  Shift      TINYINT,
  PartTypeID INTEGER FOREIGN KEY REFERENCES PartType(IDPartType), 
  SAPNumber  VARCHAR(10),
  Target     INTEGER,
  Tag        VARCHAR(255)       
);  

CREATE TABLE Crimper(
  IDCrimper   INTEGER PRIMARY KEY IDENTITY(1,1),
  PartTypeID  INTEGER FOREIGN KEY REFERENCES PartType(IDPartType),
  Date        SMALLDATETIME,
  Crew        VARCHAR(3),
  Shift       TINYINT,
  CrimperNo   TINYINT,
  QuantityOK  INTEGER,
  QuantityNG  INTEGER,
  SAPNumber   VARCHAR(12),
  Tag         VARCHAR(255)
);

Następnie idą dwa zapytania. jedno rysuje łamaną dla planu, drugie rysuje słupki dla wyników. Generalnie warunek WHERE jest taki sam dla obu (z pominięciem w MTarget kilku pól, których po prostu nie ma. I teraz do sedna. Na samym początku w MTarget pole MachineNo nazywało się CrimperNo. Potem przebudowałem bazę a o tym polu kompletnie zapomniałem.

Tak więc błąd zgłaszało zapytanie w stylu:

SELECT * FROM MTarget WHERE CrimperNo = 1;

Po ujednoliceniu nazwy kolumny do MachineNo wszystko gra.

// Żaden wstyd - takie coś często mi się zdarza - Deti

1 użytkowników online, w tym zalogowanych: 0, gości: 1